// $ANTLR 3.1.2 C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g 2009-08-08 10:45:59

// The variable 'variable' is assigned but its value is never used.
#pragma warning disable 168, 219
// Unreachable code detected.
#pragma warning disable 162

//Parser Header	
using SscLib;


using System;
using Antlr.Runtime;
using Antlr.Runtime.Tree;using IList 		= System.Collections.IList;
using ArrayList 	= System.Collections.ArrayList;
using Stack 		= Antlr.Runtime.Collections.StackList;

using IDictionary	= System.Collections.IDictionary;
using Hashtable 	= System.Collections.Hashtable;

public partial class SimSharpAnalyse : TreeParser
{
    public static readonly string[] tokenNames = new string[] 
	{
        "<invalid>", 
		"<EOR>", 
		"<DOWN>", 
		"<UP>", 
		"SimulaSourceModule", 
		"Program", 
		"Block", 
		"SubBlock", 
		"BlockHead", 
		"Declaration", 
		"VarDecl", 
		"Type", 
		"TypeList", 
		"ConstElement", 
		"Variable", 
		"LitteralNum", 
		"Statement", 
		"CompoundTail", 
		"CompoundStatement", 
		"ActualParameters", 
		"Source", 
		"Destination", 
		"RemoteAccess", 
		"MethOrArrayParams", 
		"Identifier", 
		"MethCall", 
		"ConnectBlock1", 
		"ConnectBlock2", 
		"ProcDecl", 
		"ProcBody", 
		"FormalParameters", 
		"Specification", 
		"ForRightPart", 
		"StepListElement", 
		"WhileListElement", 
		"Unary", 
		"ClassDecl", 
		"ClassBody", 
		"RemoteAssign", 
		"ArrayDecl", 
		"Array", 
		"ArrayDim", 
		"IdentList", 
		"Prolog", 
		"Epilog", 
		"AndThen", 
		"OrElse", 
		"Label", 
		"GoTo", 
		"LabelDesignator", 
		"SwitchDesignator", 
		"SwitchList", 
		"PrefixedBlock", 
		"PLUS", 
		"MINUS", 
		"TIMES", 
		"DIV", 
		"INTDIV", 
		"EXP", 
		"CONCAT", 
		"LONGEXP", 
		"REFEQ", 
		"REFNEQ", 
		"SCOLON", 
		"COLON", 
		"LPAR", 
		"RPAR", 
		"DOT", 
		"COMMA", 
		"VALASSIGN", 
		"REFASSIGN", 
		"EXTERNAL", 
		"PROCEDURE", 
		"ID", 
		"IS", 
		"CLASS", 
		"EQ", 
		"STRING", 
		"ACTIVATE", 
		"REACTIVATE", 
		"BEFORE", 
		"AFTER", 
		"PRIOR", 
		"AT", 
		"DELAY", 
		"ELSE", 
		"IF", 
		"THEN", 
		"WHILE", 
		"DO", 
		"FOR", 
		"STEP", 
		"UNTIL", 
		"GOTO", 
		"GO", 
		"TO", 
		"INSPECT", 
		"WHEN", 
		"OTHERWISE", 
		"BEGIN", 
		"END", 
		"ARRAY", 
		"SWITCH", 
		"LABEL", 
		"NAME", 
		"VALUE", 
		"INNER", 
		"VIRTUAL", 
		"HIDDEN", 
		"PROTECTED", 
		"OR", 
		"AND", 
		"EQV", 
		"IMP", 
		"NOT", 
		"IN", 
		"LT", 
		"LE", 
		"GE", 
		"GT", 
		"NE", 
		"QUA", 
		"NONE", 
		"NUM_INT", 
		"NUM_REAL", 
		"NOTEXT", 
		"CHARCONST", 
		"NEW", 
		"THIS", 
		"BOOLEAN", 
		"CHARACTER", 
		"INTEGER", 
		"SHORT", 
		"REAL", 
		"LONG", 
		"TEXT", 
		"REF", 
		"TRUE", 
		"FALSE", 
		"A", 
		"C", 
		"T", 
		"I", 
		"V", 
		"E", 
		"F", 
		"R", 
		"N", 
		"D", 
		"Y", 
		"B", 
		"O", 
		"G", 
		"L", 
		"H", 
		"S", 
		"M", 
		"COMMENT", 
		"Q", 
		"X", 
		"P", 
		"W", 
		"U", 
		"LETTER", 
		"DIGIT", 
		"RADIX", 
		"RADIXDIGIT", 
		"DECIMALNUMBER", 
		"EXPONENTPART", 
		"CHAR", 
		"COMM", 
		"WHITESPACE", 
		"DECIMALFRAC", 
		"J", 
		"K", 
		"Z"
    };

    public const int EXTERNAL = 71;
    public const int ProcBody = 29;
    public const int LT = 116;
    public const int WHILE = 88;
    public const int Array = 40;
    public const int Specification = 31;
    public const int LETTER = 163;
    public const int CHAR = 169;
    public const int NEW = 127;
    public const int DO = 89;
    public const int WhileListElement = 34;
    public const int NOT = 114;
    public const int ClassBody = 37;
    public const int EOF = -1;
    public const int CHARACTER = 130;
    public const int Identifier = 24;
    public const int NAME = 104;
    public const int Variable = 14;
    public const int LPAR = 65;
    public const int EXP = 58;
    public const int Declaration = 9;
    public const int NUM_REAL = 124;
    public const int MethCall = 25;
    public const int BEGIN = 99;
    public const int Unary = 35;
    public const int THIS = 128;
    public const int IMP = 113;
    public const int RADIX = 165;
    public const int EQ = 76;
    public const int GOTO = 93;
    public const int COMMENT = 157;
    public const int ForRightPart = 32;
    public const int VIRTUAL = 107;
    public const int REFNEQ = 62;
    public const int ARRAY = 101;
    public const int OTHERWISE = 98;
    public const int NE = 120;
    public const int D = 148;
    public const int E = 144;
    public const int GE = 118;
    public const int F = 145;
    public const int G = 152;
    public const int A = 139;
    public const int B = 150;
    public const int C = 140;
    public const int L = 153;
    public const int CONCAT = 59;
    public const int M = 156;
    public const int StepListElement = 33;
    public const int N = 147;
    public const int O = 151;
    public const int H = 154;
    public const int SWITCH = 102;
    public const int I = 142;
    public const int J = 173;
    public const int ELSE = 85;
    public const int K = 174;
    public const int U = 162;
    public const int T = 141;
    public const int WHITESPACE = 171;
    public const int W = 161;
    public const int V = 143;
    public const int QUA = 121;
    public const int Q = 158;
    public const int P = 160;
    public const int S = 155;
    public const int R = 146;
    public const int VALUE = 105;
    public const int Y = 149;
    public const int MethOrArrayParams = 23;
    public const int X = 159;
    public const int Block = 6;
    public const int Z = 175;
    public const int REAL = 133;
    public const int GoTo = 48;
    public const int BlockHead = 8;
    public const int REACTIVATE = 79;
    public const int UNTIL = 92;
    public const int DECIMALFRAC = 172;
    public const int INSPECT = 96;
    public const int NONE = 122;
    public const int NUM_INT = 123;
    public const int OR = 110;
    public const int GT = 119;
    public const int VALASSIGN = 69;
    public const int GO = 94;
    public const int END = 100;
    public const int FALSE = 138;
    public const int ConstElement = 13;
    public const int Label = 47;
    public const int SubBlock = 7;
    public const int NOTEXT = 125;
    public const int RADIXDIGIT = 166;
    public const int Destination = 21;
    public const int SwitchDesignator = 50;
    public const int DELAY = 84;
    public const int PROTECTED = 109;
    public const int CLASS = 75;
    public const int Epilog = 44;
    public const int INNER = 106;
    public const int INTDIV = 57;
    public const int PrefixedBlock = 52;
    public const int ProcDecl = 28;
    public const int SimulaSourceModule = 4;
    public const int STEP = 91;
    public const int FOR = 90;
    public const int LitteralNum = 15;
    public const int VarDecl = 10;
    public const int ID = 73;
    public const int AND = 111;
    public const int AndThen = 45;
    public const int Program = 5;
    public const int ActualParameters = 19;
    public const int IF = 86;
    public const int TypeList = 12;
    public const int AT = 83;
    public const int ConnectBlock1 = 26;
    public const int ConnectBlock2 = 27;
    public const int BOOLEAN = 129;
    public const int THEN = 87;
    public const int IN = 115;
    public const int RemoteAssign = 38;
    public const int COMMA = 68;
    public const int IS = 74;
    public const int CompoundTail = 17;
    public const int ArrayDim = 41;
    public const int CompoundStatement = 18;
    public const int Source = 20;
    public const int PLUS = 53;
    public const int REFEQ = 61;
    public const int SwitchList = 51;
    public const int DIGIT = 164;
    public const int DOT = 67;
    public const int Prolog = 43;
    public const int FormalParameters = 30;
    public const int IdentList = 42;
    public const int SCOLON = 63;
    public const int INTEGER = 131;
    public const int Type = 11;
    public const int ArrayDecl = 39;
    public const int Statement = 16;
    public const int TO = 95;
    public const int ACTIVATE = 78;
    public const int LabelDesignator = 49;
    public const int ClassDecl = 36;
    public const int BEFORE = 80;
    public const int SHORT = 132;
    public const int LONGEXP = 60;
    public const int COMM = 170;
    public const int AFTER = 81;
    public const int MINUS = 54;
    public const int TEXT = 135;
    public const int OrElse = 46;
    public const int TRUE = 137;
    public const int PROCEDURE = 72;
    public const int REFASSIGN = 70;
    public const int REF = 136;
    public const int COLON = 64;
    public const int DECIMALNUMBER = 167;
    public const int EXPONENTPART = 168;
    public const int LABEL = 103;
    public const int WHEN = 97;
    public const int HIDDEN = 108;
    public const int RemoteAccess = 22;
    public const int RPAR = 66;
    public const int EQV = 112;
    public const int DIV = 56;
    public const int TIMES = 55;
    public const int LONG = 134;
    public const int LE = 117;
    public const int PRIOR = 82;
    public const int STRING = 77;
    public const int CHARCONST = 126;

    // delegates
    // delegators



        public SimSharpAnalyse(ITreeNodeStream input)
    		: this(input, new RecognizerSharedState()) {
        }

        public SimSharpAnalyse(ITreeNodeStream input, RecognizerSharedState state)
    		: base(input, state) {
            InitializeCyclicDFAs();

             
        }
        

    override public string[] TokenNames {
		get { return SimSharpAnalyse.tokenNames; }
    }

    override public string GrammarFileName {
		get { return "C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g"; }
    }


    //Parser Members
    SymbolTable symTab;
    Context ctx = new Context();
    bool classDefinition = false;

        public SscLib.IErrorManager errMan;
        
        public override void DisplayRecognitionError(string[] tokenNames, RecognitionException e)
        {
            string header = base.GetErrorHeader(e);
            string message = base.GetErrorMessage(e, tokenNames);
            errMan.ReportError("Semantic", header, message, tokenNames, e);
        }



    // $ANTLR start "begin"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:34:1: begin[SymbolTable st] : ^( SimulaSourceModule program ) ;
    public void begin(SymbolTable st) // throws RecognitionException [1]
    {   

        this.symTab = st;
        this.ctx.Push(st.TopScope);

        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:39:2: ( ^( SimulaSourceModule program ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:39:4: ^( SimulaSourceModule program )
            {
            	Match(input,SimulaSourceModule,FOLLOW_SimulaSourceModule_in_begin87); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	PushFollow(FOLLOW_program_in_begin93);
            	program();
            	state.followingStackPointer--;
            	if (state.failed) return ;

            	Match(input, Token.UP, null); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "begin"


    // $ANTLR start "program"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:44:1: program : ^( Program programBody ) ;
    public void program() // throws RecognitionException [1]
    {   
        SimSharpTreeNode Program1 = null;


        bool oldClassDef = this.classDefinition;

        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:48:2: ( ^( Program programBody ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:48:4: ^( Program programBody )
            {
            	Program1=(SimSharpTreeNode)Match(input,Program,FOLLOW_Program_in_program116); if (state.failed) return ;

            	if ( (state.backtracking==0) )
            	{

            	  	  	ProgramSymbol prog = ctx.Scope.ResolveType("Program") as ProgramSymbol; 
            	  	  	Program1.Symbol = prog;
            	  	  	ctx.Push(prog);
            	  	  	
            	  	  	CtorSymbol prolog = prog.AddCtor();
            	  	  	ctx.Push(prolog);
            	  	  	
            	  	  	this.classDefinition = true;
            	  	  	
            	}

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	PushFollow(FOLLOW_programBody_in_program127);
            	programBody();
            	state.followingStackPointer--;
            	if (state.failed) return ;
            	if ( (state.backtracking==0) )
            	{

            	  		this.classDefinition = oldClassDef;
            	  		
            	  		ctx.Pop(); //ctor
            	  		ctx.Pop(); //program class
            	  		
            	}

            	Match(input, Token.UP, null); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "program"


    // $ANTLR start "programBody"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:69:1: programBody : ( block | compoundStatement );
    public void programBody() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:70:2: ( block | compoundStatement )
            int alt1 = 2;
            int LA1_0 = input.LA(1);

            if ( (LA1_0 == Block) )
            {
                alt1 = 1;
            }
            else if ( (LA1_0 == CompoundStatement) )
            {
                alt1 = 2;
            }
            else 
            {
                if ( state.backtracking > 0 ) {state.failed = true; return ;}
                NoViableAltException nvae_d1s0 =
                    new NoViableAltException("", 1, 0, input);

                throw nvae_d1s0;
            }
            switch (alt1) 
            {
                case 1 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:70:4: block
                    {
                    	PushFollow(FOLLOW_block_in_programBody147);
                    	block();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    }
                    break;
                case 2 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:71:4: compoundStatement
                    {
                    	PushFollow(FOLLOW_compoundStatement_in_programBody152);
                    	compoundStatement();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "programBody"


    // $ANTLR start "labeledStatement"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:74:1: labeledStatement : statement ;
    public void labeledStatement() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:75:2: ( statement )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:75:4: statement
            {
            	PushFollow(FOLLOW_statement_in_labeledStatement164);
            	statement();
            	state.followingStackPointer--;
            	if (state.failed) return ;

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "labeledStatement"


    // $ANTLR start "statement"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:78:1: statement : ( block | prefixedBlock | valueAssignment | refAssignment | methCall | connection | compoundStatement | condition | whileStatement | forStatement | objectGenerator | gotoStatement | labelStatement );
    public void statement() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:79:2: ( block | prefixedBlock | valueAssignment | refAssignment | methCall | connection | compoundStatement | condition | whileStatement | forStatement | objectGenerator | gotoStatement | labelStatement )
            int alt2 = 13;
            alt2 = dfa2.Predict(input);
            switch (alt2) 
            {
                case 1 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:79:4: block
                    {
                    	PushFollow(FOLLOW_block_in_statement176);
                    	block();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    }
                    break;
                case 2 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:80:4: prefixedBlock
                    {
                    	PushFollow(FOLLOW_prefixedBlock_in_statement181);
                    	prefixedBlock();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    }
                    break;
                case 3 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:81:4: valueAssignment
                    {
                    	PushFollow(FOLLOW_valueAssignment_in_statement186);
                    	valueAssignment();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    }
                    break;
                case 4 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:82:4: refAssignment
                    {
                    	PushFollow(FOLLOW_refAssignment_in_statement191);
                    	refAssignment();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    }
                    break;
                case 5 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:83:4: methCall
                    {
                    	PushFollow(FOLLOW_methCall_in_statement196);
                    	methCall();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    }
                    break;
                case 6 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:84:4: connection
                    {
                    	PushFollow(FOLLOW_connection_in_statement201);
                    	connection();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    }
                    break;
                case 7 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:85:4: compoundStatement
                    {
                    	PushFollow(FOLLOW_compoundStatement_in_statement206);
                    	compoundStatement();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    }
                    break;
                case 8 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:86:4: condition
                    {
                    	PushFollow(FOLLOW_condition_in_statement211);
                    	condition();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    }
                    break;
                case 9 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:87:4: whileStatement
                    {
                    	PushFollow(FOLLOW_whileStatement_in_statement216);
                    	whileStatement();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    }
                    break;
                case 10 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:88:4: forStatement
                    {
                    	PushFollow(FOLLOW_forStatement_in_statement221);
                    	forStatement();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    }
                    break;
                case 11 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:89:4: objectGenerator
                    {
                    	PushFollow(FOLLOW_objectGenerator_in_statement226);
                    	objectGenerator();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    }
                    break;
                case 12 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:90:4: gotoStatement
                    {
                    	PushFollow(FOLLOW_gotoStatement_in_statement231);
                    	gotoStatement();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    }
                    break;
                case 13 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:91:4: labelStatement
                    {
                    	PushFollow(FOLLOW_labelStatement_in_statement236);
                    	labelStatement();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "statement"


    // $ANTLR start "labelStatement"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:94:1: labelStatement : ^( Label i= ID ) ;
    public void labelStatement() // throws RecognitionException [1]
    {   
        SimSharpTreeNode i = null;

        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:95:2: ( ^( Label i= ID ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:95:4: ^( Label i= ID )
            {
            	Match(input,Label,FOLLOW_Label_in_labelStatement249); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	i=(SimSharpTreeNode)Match(input,ID,FOLLOW_ID_in_labelStatement253); if (state.failed) return ;

            	Match(input, Token.UP, null); if (state.failed) return ;
            	if ( (state.backtracking==0) )
            	{

            	  		LabelSymbol labSym = ctx.Scope.AddLabel( ((i != null) ? i.Text : null));
            	  		i.Symbol = labSym;
            	  		
            	}

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "labelStatement"


    // $ANTLR start "gotoStatement"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:102:1: gotoStatement : ^( GoTo designationalExpression ) ;
    public void gotoStatement() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:103:2: ( ^( GoTo designationalExpression ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:103:5: ^( GoTo designationalExpression )
            {
            	Match(input,GoTo,FOLLOW_GoTo_in_gotoStatement272); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	PushFollow(FOLLOW_designationalExpression_in_gotoStatement274);
            	designationalExpression();
            	state.followingStackPointer--;
            	if (state.failed) return ;

            	Match(input, Token.UP, null); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "gotoStatement"


    // $ANTLR start "designationalExpression"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:106:1: designationalExpression : ( ^( SwitchDesignator ID expression ) | ^( LabelDesignator ID ) );
    public void designationalExpression() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:107:2: ( ^( SwitchDesignator ID expression ) | ^( LabelDesignator ID ) )
            int alt3 = 2;
            int LA3_0 = input.LA(1);

            if ( (LA3_0 == SwitchDesignator) )
            {
                alt3 = 1;
            }
            else if ( (LA3_0 == LabelDesignator) )
            {
                alt3 = 2;
            }
            else 
            {
                if ( state.backtracking > 0 ) {state.failed = true; return ;}
                NoViableAltException nvae_d3s0 =
                    new NoViableAltException("", 3, 0, input);

                throw nvae_d3s0;
            }
            switch (alt3) 
            {
                case 1 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:107:4: ^( SwitchDesignator ID expression )
                    {
                    	Match(input,SwitchDesignator,FOLLOW_SwitchDesignator_in_designationalExpression288); if (state.failed) return ;

                    	Match(input, Token.DOWN, null); if (state.failed) return ;
                    	Match(input,ID,FOLLOW_ID_in_designationalExpression290); if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_designationalExpression292);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    	Match(input, Token.UP, null); if (state.failed) return ;

                    }
                    break;
                case 2 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:108:4: ^( LabelDesignator ID )
                    {
                    	Match(input,LabelDesignator,FOLLOW_LabelDesignator_in_designationalExpression299); if (state.failed) return ;

                    	Match(input, Token.DOWN, null); if (state.failed) return ;
                    	Match(input,ID,FOLLOW_ID_in_designationalExpression301); if (state.failed) return ;

                    	Match(input, Token.UP, null); if (state.failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "designationalExpression"


    // $ANTLR start "forStatement"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:111:1: forStatement : ^( FOR ID forRightPart statement ) ;
    public void forStatement() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:112:2: ( ^( FOR ID forRightPart statement ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:112:4: ^( FOR ID forRightPart statement )
            {
            	Match(input,FOR,FOLLOW_FOR_in_forStatement315); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	Match(input,ID,FOLLOW_ID_in_forStatement317); if (state.failed) return ;
            	PushFollow(FOLLOW_forRightPart_in_forStatement319);
            	forRightPart();
            	state.followingStackPointer--;
            	if (state.failed) return ;
            	PushFollow(FOLLOW_statement_in_forStatement321);
            	statement();
            	state.followingStackPointer--;
            	if (state.failed) return ;

            	Match(input, Token.UP, null); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "forStatement"


    // $ANTLR start "forRightPart"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:115:1: forRightPart : ( ^( VALASSIGN ( forListElement )* ) | ^( REFASSIGN ( forListElement )* ) );
    public void forRightPart() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:116:2: ( ^( VALASSIGN ( forListElement )* ) | ^( REFASSIGN ( forListElement )* ) )
            int alt6 = 2;
            int LA6_0 = input.LA(1);

            if ( (LA6_0 == VALASSIGN) )
            {
                alt6 = 1;
            }
            else if ( (LA6_0 == REFASSIGN) )
            {
                alt6 = 2;
            }
            else 
            {
                if ( state.backtracking > 0 ) {state.failed = true; return ;}
                NoViableAltException nvae_d6s0 =
                    new NoViableAltException("", 6, 0, input);

                throw nvae_d6s0;
            }
            switch (alt6) 
            {
                case 1 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:116:4: ^( VALASSIGN ( forListElement )* )
                    {
                    	Match(input,VALASSIGN,FOLLOW_VALASSIGN_in_forRightPart335); if (state.failed) return ;

                    	if ( input.LA(1) == Token.DOWN )
                    	{
                    	    Match(input, Token.DOWN, null); if (state.failed) return ;
                    	    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:116:16: ( forListElement )*
                    	    do 
                    	    {
                    	        int alt4 = 2;
                    	        int LA4_0 = input.LA(1);

                    	        if ( ((LA4_0 >= StepListElement && LA4_0 <= WhileListElement)) )
                    	        {
                    	            alt4 = 1;
                    	        }


                    	        switch (alt4) 
                    	    	{
                    	    		case 1 :
                    	    		    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:116:16: forListElement
                    	    		    {
                    	    		    	PushFollow(FOLLOW_forListElement_in_forRightPart337);
                    	    		    	forListElement();
                    	    		    	state.followingStackPointer--;
                    	    		    	if (state.failed) return ;

                    	    		    }
                    	    		    break;

                    	    		default:
                    	    		    goto loop4;
                    	        }
                    	    } while (true);

                    	    loop4:
                    	    	;	// Stops C# compiler whining that label 'loop4' has no statements


                    	    Match(input, Token.UP, null); if (state.failed) return ;
                    	}

                    }
                    break;
                case 2 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:117:4: ^( REFASSIGN ( forListElement )* )
                    {
                    	Match(input,REFASSIGN,FOLLOW_REFASSIGN_in_forRightPart345); if (state.failed) return ;

                    	if ( input.LA(1) == Token.DOWN )
                    	{
                    	    Match(input, Token.DOWN, null); if (state.failed) return ;
                    	    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:117:16: ( forListElement )*
                    	    do 
                    	    {
                    	        int alt5 = 2;
                    	        int LA5_0 = input.LA(1);

                    	        if ( ((LA5_0 >= StepListElement && LA5_0 <= WhileListElement)) )
                    	        {
                    	            alt5 = 1;
                    	        }


                    	        switch (alt5) 
                    	    	{
                    	    		case 1 :
                    	    		    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:117:16: forListElement
                    	    		    {
                    	    		    	PushFollow(FOLLOW_forListElement_in_forRightPart347);
                    	    		    	forListElement();
                    	    		    	state.followingStackPointer--;
                    	    		    	if (state.failed) return ;

                    	    		    }
                    	    		    break;

                    	    		default:
                    	    		    goto loop5;
                    	        }
                    	    } while (true);

                    	    loop5:
                    	    	;	// Stops C# compiler whining that label 'loop5' has no statements


                    	    Match(input, Token.UP, null); if (state.failed) return ;
                    	}

                    }
                    break;

            }
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "forRightPart"


    // $ANTLR start "forListElement"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:120:1: forListElement : ( ^( StepListElement expression STEP expression expression UNTIL expression ) | ^( WhileListElement expression ) );
    public void forListElement() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:121:2: ( ^( StepListElement expression STEP expression expression UNTIL expression ) | ^( WhileListElement expression ) )
            int alt7 = 2;
            int LA7_0 = input.LA(1);

            if ( (LA7_0 == StepListElement) )
            {
                alt7 = 1;
            }
            else if ( (LA7_0 == WhileListElement) )
            {
                alt7 = 2;
            }
            else 
            {
                if ( state.backtracking > 0 ) {state.failed = true; return ;}
                NoViableAltException nvae_d7s0 =
                    new NoViableAltException("", 7, 0, input);

                throw nvae_d7s0;
            }
            switch (alt7) 
            {
                case 1 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:121:4: ^( StepListElement expression STEP expression expression UNTIL expression )
                    {
                    	Match(input,StepListElement,FOLLOW_StepListElement_in_forListElement362); if (state.failed) return ;

                    	Match(input, Token.DOWN, null); if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_forListElement364);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;
                    	Match(input,STEP,FOLLOW_STEP_in_forListElement366); if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_forListElement368);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_forListElement370);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;
                    	Match(input,UNTIL,FOLLOW_UNTIL_in_forListElement372); if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_forListElement374);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    	Match(input, Token.UP, null); if (state.failed) return ;

                    }
                    break;
                case 2 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:122:4: ^( WhileListElement expression )
                    {
                    	Match(input,WhileListElement,FOLLOW_WhileListElement_in_forListElement381); if (state.failed) return ;

                    	Match(input, Token.DOWN, null); if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_forListElement383);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    	Match(input, Token.UP, null); if (state.failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "forListElement"


    // $ANTLR start "whileStatement"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:125:1: whileStatement : ^( WHILE expression statement ) ;
    public void whileStatement() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:126:2: ( ^( WHILE expression statement ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:126:4: ^( WHILE expression statement )
            {
            	Match(input,WHILE,FOLLOW_WHILE_in_whileStatement397); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	PushFollow(FOLLOW_expression_in_whileStatement399);
            	expression();
            	state.followingStackPointer--;
            	if (state.failed) return ;
            	PushFollow(FOLLOW_statement_in_whileStatement401);
            	statement();
            	state.followingStackPointer--;
            	if (state.failed) return ;

            	Match(input, Token.UP, null); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "whileStatement"


    // $ANTLR start "condition"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:129:1: condition : ^( IF expression statement ( statement )? ) ;
    public void condition() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:130:2: ( ^( IF expression statement ( statement )? ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:130:4: ^( IF expression statement ( statement )? )
            {
            	Match(input,IF,FOLLOW_IF_in_condition415); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	PushFollow(FOLLOW_expression_in_condition417);
            	expression();
            	state.followingStackPointer--;
            	if (state.failed) return ;
            	PushFollow(FOLLOW_statement_in_condition419);
            	statement();
            	state.followingStackPointer--;
            	if (state.failed) return ;
            	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:130:30: ( statement )?
            	int alt8 = 2;
            	int LA8_0 = input.LA(1);

            	if ( (LA8_0 == Block || LA8_0 == CompoundStatement || LA8_0 == MethCall || (LA8_0 >= Label && LA8_0 <= GoTo) || LA8_0 == PrefixedBlock || (LA8_0 >= VALASSIGN && LA8_0 <= REFASSIGN) || LA8_0 == IF || LA8_0 == WHILE || LA8_0 == FOR || LA8_0 == INSPECT || LA8_0 == NEW) )
            	{
            	    alt8 = 1;
            	}
            	switch (alt8) 
            	{
            	    case 1 :
            	        // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:130:31: statement
            	        {
            	        	PushFollow(FOLLOW_statement_in_condition422);
            	        	statement();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return ;

            	        }
            	        break;

            	}


            	Match(input, Token.UP, null); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "condition"


    // $ANTLR start "compoundStatement"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:133:1: compoundStatement : ^( CompoundStatement ( statement )* ) ;
    public void compoundStatement() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:134:2: ( ^( CompoundStatement ( statement )* ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:134:4: ^( CompoundStatement ( statement )* )
            {
            	Match(input,CompoundStatement,FOLLOW_CompoundStatement_in_compoundStatement438); if (state.failed) return ;

            	if ( input.LA(1) == Token.DOWN )
            	{
            	    Match(input, Token.DOWN, null); if (state.failed) return ;
            	    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:135:2: ( statement )*
            	    do 
            	    {
            	        int alt9 = 2;
            	        int LA9_0 = input.LA(1);

            	        if ( (LA9_0 == Block || LA9_0 == CompoundStatement || LA9_0 == MethCall || (LA9_0 >= Label && LA9_0 <= GoTo) || LA9_0 == PrefixedBlock || (LA9_0 >= VALASSIGN && LA9_0 <= REFASSIGN) || LA9_0 == IF || LA9_0 == WHILE || LA9_0 == FOR || LA9_0 == INSPECT || LA9_0 == NEW) )
            	        {
            	            alt9 = 1;
            	        }


            	        switch (alt9) 
            	    	{
            	    		case 1 :
            	    		    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:135:2: statement
            	    		    {
            	    		    	PushFollow(FOLLOW_statement_in_compoundStatement442);
            	    		    	statement();
            	    		    	state.followingStackPointer--;
            	    		    	if (state.failed) return ;

            	    		    }
            	    		    break;

            	    		default:
            	    		    goto loop9;
            	        }
            	    } while (true);

            	    loop9:
            	    	;	// Stops C# compiler whining that label 'loop9' has no statements


            	    Match(input, Token.UP, null); if (state.failed) return ;
            	}

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "compoundStatement"


    // $ANTLR start "connection"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:138:1: connection : ^( INSPECT expression ( connect2 | ( whenClause )+ ) ( otherwiseClause )? ) ;
    public void connection() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:139:2: ( ^( INSPECT expression ( connect2 | ( whenClause )+ ) ( otherwiseClause )? ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:139:4: ^( INSPECT expression ( connect2 | ( whenClause )+ ) ( otherwiseClause )? )
            {
            	Match(input,INSPECT,FOLLOW_INSPECT_in_connection457); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	PushFollow(FOLLOW_expression_in_connection459);
            	expression();
            	state.followingStackPointer--;
            	if (state.failed) return ;
            	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:139:25: ( connect2 | ( whenClause )+ )
            	int alt11 = 2;
            	int LA11_0 = input.LA(1);

            	if ( (LA11_0 == ConnectBlock2) )
            	{
            	    alt11 = 1;
            	}
            	else if ( (LA11_0 == WHEN) )
            	{
            	    alt11 = 2;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return ;}
            	    NoViableAltException nvae_d11s0 =
            	        new NoViableAltException("", 11, 0, input);

            	    throw nvae_d11s0;
            	}
            	switch (alt11) 
            	{
            	    case 1 :
            	        // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:139:26: connect2
            	        {
            	        	PushFollow(FOLLOW_connect2_in_connection462);
            	        	connect2();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return ;

            	        }
            	        break;
            	    case 2 :
            	        // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:139:35: ( whenClause )+
            	        {
            	        	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:139:35: ( whenClause )+
            	        	int cnt10 = 0;
            	        	do 
            	        	{
            	        	    int alt10 = 2;
            	        	    int LA10_0 = input.LA(1);

            	        	    if ( (LA10_0 == WHEN) )
            	        	    {
            	        	        alt10 = 1;
            	        	    }


            	        	    switch (alt10) 
            	        		{
            	        			case 1 :
            	        			    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:139:36: whenClause
            	        			    {
            	        			    	PushFollow(FOLLOW_whenClause_in_connection465);
            	        			    	whenClause();
            	        			    	state.followingStackPointer--;
            	        			    	if (state.failed) return ;

            	        			    }
            	        			    break;

            	        			default:
            	        			    if ( cnt10 >= 1 ) goto loop10;
            	        			    if ( state.backtracking > 0 ) {state.failed = true; return ;}
            	        		            EarlyExitException eee10 =
            	        		                new EarlyExitException(10, input);
            	        		            throw eee10;
            	        	    }
            	        	    cnt10++;
            	        	} while (true);

            	        	loop10:
            	        		;	// Stops C# compiler whinging that label 'loop10' has no statements


            	        }
            	        break;

            	}

            	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:139:50: ( otherwiseClause )?
            	int alt12 = 2;
            	int LA12_0 = input.LA(1);

            	if ( (LA12_0 == OTHERWISE) )
            	{
            	    alt12 = 1;
            	}
            	switch (alt12) 
            	{
            	    case 1 :
            	        // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:139:51: otherwiseClause
            	        {
            	        	PushFollow(FOLLOW_otherwiseClause_in_connection471);
            	        	otherwiseClause();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return ;

            	        }
            	        break;

            	}


            	Match(input, Token.UP, null); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "connection"


    // $ANTLR start "whenClause"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:142:1: whenClause : ^( WHEN ID connect1 ) ;
    public void whenClause() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:143:2: ( ^( WHEN ID connect1 ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:143:4: ^( WHEN ID connect1 )
            {
            	Match(input,WHEN,FOLLOW_WHEN_in_whenClause486); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	Match(input,ID,FOLLOW_ID_in_whenClause488); if (state.failed) return ;
            	PushFollow(FOLLOW_connect1_in_whenClause490);
            	connect1();
            	state.followingStackPointer--;
            	if (state.failed) return ;

            	Match(input, Token.UP, null); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "whenClause"


    // $ANTLR start "otherwiseClause"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:146:1: otherwiseClause : ^( OTHERWISE statement ) ;
    public void otherwiseClause() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:147:2: ( ^( OTHERWISE statement ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:147:4: ^( OTHERWISE statement )
            {
            	Match(input,OTHERWISE,FOLLOW_OTHERWISE_in_otherwiseClause504); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	PushFollow(FOLLOW_statement_in_otherwiseClause506);
            	statement();
            	state.followingStackPointer--;
            	if (state.failed) return ;

            	Match(input, Token.UP, null); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "otherwiseClause"


    // $ANTLR start "connect1"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:150:1: connect1 : ^( ConnectBlock1 statement ) ;
    public void connect1() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:151:2: ( ^( ConnectBlock1 statement ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:151:4: ^( ConnectBlock1 statement )
            {
            	Match(input,ConnectBlock1,FOLLOW_ConnectBlock1_in_connect1520); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	PushFollow(FOLLOW_statement_in_connect1522);
            	statement();
            	state.followingStackPointer--;
            	if (state.failed) return ;

            	Match(input, Token.UP, null); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "connect1"


    // $ANTLR start "connect2"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:154:1: connect2 : ^( ConnectBlock2 statement ) ;
    public void connect2() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:154:9: ( ^( ConnectBlock2 statement ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:154:11: ^( ConnectBlock2 statement )
            {
            	Match(input,ConnectBlock2,FOLLOW_ConnectBlock2_in_connect2534); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	PushFollow(FOLLOW_statement_in_connect2536);
            	statement();
            	state.followingStackPointer--;
            	if (state.failed) return ;

            	Match(input, Token.UP, null); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "connect2"


    // $ANTLR start "methCall"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:157:1: methCall : ^( MethCall e= expression ( actualParams )? ) ;
    public void methCall() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:157:9: ( ^( MethCall e= expression ( actualParams )? ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:157:11: ^( MethCall e= expression ( actualParams )? )
            {
            	Match(input,MethCall,FOLLOW_MethCall_in_methCall548); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	PushFollow(FOLLOW_expression_in_methCall552);
            	expression();
            	state.followingStackPointer--;
            	if (state.failed) return ;
            	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:157:35: ( actualParams )?
            	int alt13 = 2;
            	int LA13_0 = input.LA(1);

            	if ( (LA13_0 == ActualParameters) )
            	{
            	    alt13 = 1;
            	}
            	switch (alt13) 
            	{
            	    case 1 :
            	        // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:157:35: actualParams
            	        {
            	        	PushFollow(FOLLOW_actualParams_in_methCall554);
            	        	actualParams();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return ;

            	        }
            	        break;

            	}


            	Match(input, Token.UP, null); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "methCall"


    // $ANTLR start "actualParams"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:161:1: actualParams : ^( ActualParameters ( expression )+ ) ;
    public void actualParams() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:162:2: ( ^( ActualParameters ( expression )+ ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:163:4: ^( ActualParameters ( expression )+ )
            {
            	Match(input,ActualParameters,FOLLOW_ActualParameters_in_actualParams578); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:163:23: ( expression )+
            	int cnt14 = 0;
            	do 
            	{
            	    int alt14 = 2;
            	    alt14 = dfa14.Predict(input);
            	    switch (alt14) 
            		{
            			case 1 :
            			    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:163:23: expression
            			    {
            			    	PushFollow(FOLLOW_expression_in_actualParams580);
            			    	expression();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return ;

            			    }
            			    break;

            			default:
            			    if ( cnt14 >= 1 ) goto loop14;
            			    if ( state.backtracking > 0 ) {state.failed = true; return ;}
            		            EarlyExitException eee14 =
            		                new EarlyExitException(14, input);
            		            throw eee14;
            	    }
            	    cnt14++;
            	} while (true);

            	loop14:
            		;	// Stops C# compiler whinging that label 'loop14' has no statements


            	Match(input, Token.UP, null); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "actualParams"


    // $ANTLR start "block"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:166:1: block : ^( Block ( declaration )* ( statement )* ) ;
    public void block() // throws RecognitionException [1]
    {   
        SimSharpTreeNode Block2 = null;


        bool oldClassDef = this.classDefinition;

        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:170:2: ( ^( Block ( declaration )* ( statement )* ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:170:4: ^( Block ( declaration )* ( statement )* )
            {
            	Block2=(SimSharpTreeNode)Match(input,Block,FOLLOW_Block_in_block601); if (state.failed) return ;

            	if ( (state.backtracking==0) )
            	{

            	  //            BlockSymbol b = scope.AddBlock("_block");
            	  //     	    Block2.Symbol = b;
            	  //    	    scope = b;
            	              
            	}

            	if ( input.LA(1) == Token.DOWN )
            	{
            	    Match(input, Token.DOWN, null); if (state.failed) return ;
            	    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:177:6: ( declaration )*
            	    do 
            	    {
            	        int alt15 = 2;
            	        int LA15_0 = input.LA(1);

            	        if ( (LA15_0 == VarDecl || LA15_0 == ProcDecl || LA15_0 == ClassDecl || LA15_0 == ArrayDecl || LA15_0 == SWITCH) )
            	        {
            	            alt15 = 1;
            	        }


            	        switch (alt15) 
            	    	{
            	    		case 1 :
            	    		    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:177:6: declaration
            	    		    {
            	    		    	PushFollow(FOLLOW_declaration_in_block636);
            	    		    	declaration();
            	    		    	state.followingStackPointer--;
            	    		    	if (state.failed) return ;

            	    		    }
            	    		    break;

            	    		default:
            	    		    goto loop15;
            	        }
            	    } while (true);

            	    loop15:
            	    	;	// Stops C# compiler whining that label 'loop15' has no statements

            	    if ( (state.backtracking==0) )
            	    {

            	      	    classDefinition = false;
            	      	    
            	    }
            	    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:181:6: ( statement )*
            	    do 
            	    {
            	        int alt16 = 2;
            	        int LA16_0 = input.LA(1);

            	        if ( (LA16_0 == Block || LA16_0 == CompoundStatement || LA16_0 == MethCall || (LA16_0 >= Label && LA16_0 <= GoTo) || LA16_0 == PrefixedBlock || (LA16_0 >= VALASSIGN && LA16_0 <= REFASSIGN) || LA16_0 == IF || LA16_0 == WHILE || LA16_0 == FOR || LA16_0 == INSPECT || LA16_0 == NEW) )
            	        {
            	            alt16 = 1;
            	        }


            	        switch (alt16) 
            	    	{
            	    		case 1 :
            	    		    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:181:6: statement
            	    		    {
            	    		    	PushFollow(FOLLOW_statement_in_block652);
            	    		    	statement();
            	    		    	state.followingStackPointer--;
            	    		    	if (state.failed) return ;

            	    		    }
            	    		    break;

            	    		default:
            	    		    goto loop16;
            	        }
            	    } while (true);

            	    loop16:
            	    	;	// Stops C# compiler whining that label 'loop16' has no statements


            	    Match(input, Token.UP, null); if (state.failed) return ;
            	}
            	if ( (state.backtracking==0) )
            	{

            	  	    classDefinition = oldClassDef;
            	  	    
            	}

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "block"


    // $ANTLR start "prefixedBlock"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:187:1: prefixedBlock : ^( PrefixedBlock b= ID p= ID ( block | compoundStatement ) objectGenerator ) ;
    public void prefixedBlock() // throws RecognitionException [1]
    {   
        SimSharpTreeNode b = null;
        SimSharpTreeNode p = null;


        TypeSymbol thePrefixedBlock = null;

        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:191:2: ( ^( PrefixedBlock b= ID p= ID ( block | compoundStatement ) objectGenerator ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:191:4: ^( PrefixedBlock b= ID p= ID ( block | compoundStatement ) objectGenerator )
            {
            	Match(input,PrefixedBlock,FOLLOW_PrefixedBlock_in_prefixedBlock678); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	b=(SimSharpTreeNode)Match(input,ID,FOLLOW_ID_in_prefixedBlock685); if (state.failed) return ;
            	p=(SimSharpTreeNode)Match(input,ID,FOLLOW_ID_in_prefixedBlock691); if (state.failed) return ;
            	if ( (state.backtracking==0) )
            	{

            	  		TypeSymbol baseType = ctx.Scope.ResolveType(((b != null) ? b.Text : null));
            	  		TypeSymbol outer = ctx.CurrentType;
            	  	  	thePrefixedBlock = ctx.Scope.ResolveType(((p != null) ? p.Text : null));
            	  	  	thePrefixedBlock.BaseType = baseType;
            	  	  	p.Symbol = thePrefixedBlock;
            	  	  	
            	  	  	ctx.Push(thePrefixedBlock);
            	  	  	FieldSymbol f = thePrefixedBlock.AddField("_outer", outer);
            	  	  	thePrefixedBlock.InspectField(f);
            	  	  	
            	  	  	CtorSymbol ctor = thePrefixedBlock.AddCtor();
            	  	  	ctor.AddArgument("_outer", outer);
            	  	  	ctor.ImportBaseArguments(baseType.GetCtor());

            	  	  	MethodSymbol prolog = ctx.CurrentType.AddMethod("Prolog", SymbolTable.NoType);
            	  	  	prolog.Virtual = true;
            	  	  	ctx.Push(prolog);
            	  		
            	}
            	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:213:3: ( block | compoundStatement )
            	int alt17 = 2;
            	int LA17_0 = input.LA(1);

            	if ( (LA17_0 == Block) )
            	{
            	    alt17 = 1;
            	}
            	else if ( (LA17_0 == CompoundStatement) )
            	{
            	    alt17 = 2;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return ;}
            	    NoViableAltException nvae_d17s0 =
            	        new NoViableAltException("", 17, 0, input);

            	    throw nvae_d17s0;
            	}
            	switch (alt17) 
            	{
            	    case 1 :
            	        // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:213:4: block
            	        {
            	        	PushFollow(FOLLOW_block_in_prefixedBlock700);
            	        	block();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return ;

            	        }
            	        break;
            	    case 2 :
            	        // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:213:10: compoundStatement
            	        {
            	        	PushFollow(FOLLOW_compoundStatement_in_prefixedBlock702);
            	        	compoundStatement();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return ;

            	        }
            	        break;

            	}

            	if ( (state.backtracking==0) )
            	{

            	  		ctx.Pop(); //prolog/epilog
            	  		ctx.Pop(); //class
            	  		
            	}
            	PushFollow(FOLLOW_objectGenerator_in_prefixedBlock714);
            	objectGenerator();
            	state.followingStackPointer--;
            	if (state.failed) return ;

            	Match(input, Token.UP, null); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "prefixedBlock"


    // $ANTLR start "declaration"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:223:1: declaration : ( varDecl | procDecl | classDecl | arrayDecl | switchDecl );
    public void declaration() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:224:2: ( varDecl | procDecl | classDecl | arrayDecl | switchDecl )
            int alt18 = 5;
            switch ( input.LA(1) ) 
            {
            case VarDecl:
            	{
                alt18 = 1;
                }
                break;
            case ProcDecl:
            	{
                alt18 = 2;
                }
                break;
            case ClassDecl:
            	{
                alt18 = 3;
                }
                break;
            case ArrayDecl:
            	{
                alt18 = 4;
                }
                break;
            case SWITCH:
            	{
                alt18 = 5;
                }
                break;
            	default:
            	    if ( state.backtracking > 0 ) {state.failed = true; return ;}
            	    NoViableAltException nvae_d18s0 =
            	        new NoViableAltException("", 18, 0, input);

            	    throw nvae_d18s0;
            }

            switch (alt18) 
            {
                case 1 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:224:4: varDecl
                    {
                    	PushFollow(FOLLOW_varDecl_in_declaration732);
                    	varDecl();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    }
                    break;
                case 2 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:225:4: procDecl
                    {
                    	PushFollow(FOLLOW_procDecl_in_declaration737);
                    	procDecl();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    }
                    break;
                case 3 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:226:4: classDecl
                    {
                    	PushFollow(FOLLOW_classDecl_in_declaration742);
                    	classDecl();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    }
                    break;
                case 4 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:227:4: arrayDecl
                    {
                    	PushFollow(FOLLOW_arrayDecl_in_declaration747);
                    	arrayDecl();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    }
                    break;
                case 5 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:228:4: switchDecl
                    {
                    	PushFollow(FOLLOW_switchDecl_in_declaration752);
                    	switchDecl();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "declaration"


    // $ANTLR start "switchDecl"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:231:1: switchDecl : ^( SWITCH i= ID switchList ) ;
    public void switchDecl() // throws RecognitionException [1]
    {   
        SimSharpTreeNode i = null;

        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:232:2: ( ^( SWITCH i= ID switchList ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:232:4: ^( SWITCH i= ID switchList )
            {
            	Match(input,SWITCH,FOLLOW_SWITCH_in_switchDecl765); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	i=(SimSharpTreeNode)Match(input,ID,FOLLOW_ID_in_switchDecl769); if (state.failed) return ;
            	PushFollow(FOLLOW_switchList_in_switchDecl771);
            	switchList();
            	state.followingStackPointer--;
            	if (state.failed) return ;

            	Match(input, Token.UP, null); if (state.failed) return ;
            	if ( (state.backtracking==0) )
            	{

            	  		  SwitchSymbol sw = ctx.Scope.AddSwitch(((i != null) ? i.Text : null));
            	  		  i.Symbol = sw;
            	  		
            	}

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "switchDecl"


    // $ANTLR start "switchList"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:239:1: switchList : ^( SwitchList ( ID )* ) ;
    public void switchList() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:240:2: ( ^( SwitchList ( ID )* ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:240:4: ^( SwitchList ( ID )* )
            {
            	Match(input,SwitchList,FOLLOW_SwitchList_in_switchList789); if (state.failed) return ;

            	if ( input.LA(1) == Token.DOWN )
            	{
            	    Match(input, Token.DOWN, null); if (state.failed) return ;
            	    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:240:17: ( ID )*
            	    do 
            	    {
            	        int alt19 = 2;
            	        int LA19_0 = input.LA(1);

            	        if ( (LA19_0 == ID) )
            	        {
            	            alt19 = 1;
            	        }


            	        switch (alt19) 
            	    	{
            	    		case 1 :
            	    		    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:240:17: ID
            	    		    {
            	    		    	Match(input,ID,FOLLOW_ID_in_switchList791); if (state.failed) return ;

            	    		    }
            	    		    break;

            	    		default:
            	    		    goto loop19;
            	        }
            	    } while (true);

            	    loop19:
            	    	;	// Stops C# compiler whining that label 'loop19' has no statements


            	    Match(input, Token.UP, null); if (state.failed) return ;
            	}

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "switchList"


    // $ANTLR start "arrayDecl"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:243:1: arrayDecl : ^( ArrayDecl (t= type )? ( array[elementType] )+ ) ;
    public void arrayDecl() // throws RecognitionException [1]
    {   
        TypeSymbol t = default(TypeSymbol);



        TypeSymbol elementType = SymbolTable.Real;

        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:247:2: ( ^( ArrayDecl (t= type )? ( array[elementType] )+ ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:247:4: ^( ArrayDecl (t= type )? ( array[elementType] )+ )
            {
            	Match(input,ArrayDecl,FOLLOW_ArrayDecl_in_arrayDecl811); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:248:3: (t= type )?
            	int alt20 = 2;
            	int LA20_0 = input.LA(1);

            	if ( (LA20_0 == Type) )
            	{
            	    alt20 = 1;
            	}
            	switch (alt20) 
            	{
            	    case 1 :
            	        // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:248:4: t= type
            	        {
            	        	PushFollow(FOLLOW_type_in_arrayDecl819);
            	        	t = type();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return ;
            	        	if ( (state.backtracking==0) )
            	        	{
            	        	   elementType = t; 
            	        	}

            	        }
            	        break;

            	}

            	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:251:3: ( array[elementType] )+
            	int cnt21 = 0;
            	do 
            	{
            	    int alt21 = 2;
            	    int LA21_0 = input.LA(1);

            	    if ( (LA21_0 == Array) )
            	    {
            	        alt21 = 1;
            	    }


            	    switch (alt21) 
            		{
            			case 1 :
            			    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:251:3: array[elementType]
            			    {
            			    	PushFollow(FOLLOW_array_in_arrayDecl833);
            			    	array(elementType);
            			    	state.followingStackPointer--;
            			    	if (state.failed) return ;

            			    }
            			    break;

            			default:
            			    if ( cnt21 >= 1 ) goto loop21;
            			    if ( state.backtracking > 0 ) {state.failed = true; return ;}
            		            EarlyExitException eee21 =
            		                new EarlyExitException(21, input);
            		            throw eee21;
            	    }
            	    cnt21++;
            	} while (true);

            	loop21:
            		;	// Stops C# compiler whinging that label 'loop21' has no statements


            	Match(input, Token.UP, null); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "arrayDecl"


    // $ANTLR start "array"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:255:1: array[TypeSymbol elementType] : ^( Array (i= ID )* ( arrayDim )+ ) ;
    public void array(TypeSymbol elementType) // throws RecognitionException [1]
    {   
        SimSharpTreeNode i = null;


        int dimentions = 0;

        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:259:2: ( ^( Array (i= ID )* ( arrayDim )+ ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:259:4: ^( Array (i= ID )* ( arrayDim )+ )
            {
            	Match(input,Array,FOLLOW_Array_in_array862); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:260:4: (i= ID )*
            	do 
            	{
            	    int alt22 = 2;
            	    int LA22_0 = input.LA(1);

            	    if ( (LA22_0 == ID) )
            	    {
            	        alt22 = 1;
            	    }


            	    switch (alt22) 
            		{
            			case 1 :
            			    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:260:4: i= ID
            			    {
            			    	i=(SimSharpTreeNode)Match(input,ID,FOLLOW_ID_in_array869); if (state.failed) return ;

            			    }
            			    break;

            			default:
            			    goto loop22;
            	    }
            	} while (true);

            	loop22:
            		;	// Stops C# compiler whining that label 'loop22' has no statements

            	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:261:3: ( arrayDim )+
            	int cnt23 = 0;
            	do 
            	{
            	    int alt23 = 2;
            	    int LA23_0 = input.LA(1);

            	    if ( (LA23_0 == ArrayDim) )
            	    {
            	        alt23 = 1;
            	    }


            	    switch (alt23) 
            		{
            			case 1 :
            			    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:261:5: arrayDim
            			    {
            			    	PushFollow(FOLLOW_arrayDim_in_array877);
            			    	arrayDim();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return ;
            			    	if ( (state.backtracking==0) )
            			    	{

            			    	  		    dimentions++;
            			    	  		  
            			    	}

            			    }
            			    break;

            			default:
            			    if ( cnt23 >= 1 ) goto loop23;
            			    if ( state.backtracking > 0 ) {state.failed = true; return ;}
            		            EarlyExitException eee23 =
            		                new EarlyExitException(23, input);
            		            throw eee23;
            	    }
            	    cnt23++;
            	} while (true);

            	loop23:
            		;	// Stops C# compiler whinging that label 'loop23' has no statements


            	Match(input, Token.UP, null); if (state.failed) return ;
            	if ( (state.backtracking==0) )
            	{

            	  			TypeSymbol arrayType = elementType.GetArrayType(dimentions);
            	  			symTab.ArrayTypes.Add(arrayType);
            	  			
            	  			if (classDefinition)
            	  			  i.Symbol = ctx.CurrentType.AddField(i.Text, arrayType);
            	  			else
            	  			  i.Symbol= ctx.Scope.AddVariable(i.Text, arrayType); 
            	  			
            	}

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "array"


    // $ANTLR start "arrayDim"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:278:1: arrayDim : ^( ArrayDim expression expression ) ;
    public void arrayDim() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:278:9: ( ^( ArrayDim expression expression ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:278:11: ^( ArrayDim expression expression )
            {
            	Match(input,ArrayDim,FOLLOW_ArrayDim_in_arrayDim911); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	PushFollow(FOLLOW_expression_in_arrayDim913);
            	expression();
            	state.followingStackPointer--;
            	if (state.failed) return ;
            	PushFollow(FOLLOW_expression_in_arrayDim915);
            	expression();
            	state.followingStackPointer--;
            	if (state.failed) return ;

            	Match(input, Token.UP, null); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "arrayDim"


    // $ANTLR start "classDecl"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:281:1: classDecl : ^( ClassDecl (b= ID )? CLASS i= ID ( formalParameters[true] )? ( valueParams[true] )? ( specification[true] )? classBody ) ;
    public void classDecl() // throws RecognitionException [1]
    {   
        SimSharpTreeNode b = null;
        SimSharpTreeNode i = null;


        bool oldClassDef = this.classDefinition;
        TypeSymbol baseType = SymbolTable.SimObject;      //Base class

        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:286:2: ( ^( ClassDecl (b= ID )? CLASS i= ID ( formalParameters[true] )? ( valueParams[true] )? ( specification[true] )? classBody ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:286:4: ^( ClassDecl (b= ID )? CLASS i= ID ( formalParameters[true] )? ( valueParams[true] )? ( specification[true] )? classBody )
            {
            	Match(input,ClassDecl,FOLLOW_ClassDecl_in_classDecl934); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:286:16: (b= ID )?
            	int alt24 = 2;
            	int LA24_0 = input.LA(1);

            	if ( (LA24_0 == ID) )
            	{
            	    alt24 = 1;
            	}
            	switch (alt24) 
            	{
            	    case 1 :
            	        // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:286:17: b= ID
            	        {
            	        	b=(SimSharpTreeNode)Match(input,ID,FOLLOW_ID_in_classDecl939); if (state.failed) return ;
            	        	if ( (state.backtracking==0) )
            	        	{
            	        	   baseType = ctx.Scope.ResolveType(((b != null) ? b.Text : null)); 
            	        	}

            	        }
            	        break;

            	}

            	Match(input,CLASS,FOLLOW_CLASS_in_classDecl948); if (state.failed) return ;
            	i=(SimSharpTreeNode)Match(input,ID,FOLLOW_ID_in_classDecl955); if (state.failed) return ;
            	if ( (state.backtracking==0) )
            	{
            	   
            	  		TypeSymbol outer = ctx.CurrentType;
            	  	  	TypeSymbol c = ctx.CurrentType.ResolveType(((i != null) ? i.Text : null));
            	  	  	c.BaseType = baseType; 
            	  	  	i.Symbol = c;
            	  	  	
            	  	  	ctx.Push(c);
            	  	  	FieldSymbol f = c.AddField("_outer", outer);
            	  	  	c.InspectField(f);
            	  	  	
            	  	  	CtorSymbol ctor = c.AddCtor();
            	  	  	ctor.AddArgument("_outer", outer);
            	  	  	ctor.ImportBaseArguments(baseType.GetCtor());
            	  	  	ctx.Push(ctor);
            	  	  	
            	  	  	this.classDefinition = true;
            	  	  	
            	}
            	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:306:5: ( formalParameters[true] )?
            	int alt25 = 2;
            	int LA25_0 = input.LA(1);

            	if ( (LA25_0 == FormalParameters) )
            	{
            	    alt25 = 1;
            	}
            	switch (alt25) 
            	{
            	    case 1 :
            	        // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:306:6: formalParameters[true]
            	        {
            	        	PushFollow(FOLLOW_formalParameters_in_classDecl967);
            	        	formalParameters(true);
            	        	state.followingStackPointer--;
            	        	if (state.failed) return ;

            	        }
            	        break;

            	}

            	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:307:5: ( valueParams[true] )?
            	int alt26 = 2;
            	int LA26_0 = input.LA(1);

            	if ( (LA26_0 == VALUE) )
            	{
            	    alt26 = 1;
            	}
            	switch (alt26) 
            	{
            	    case 1 :
            	        // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:307:6: valueParams[true]
            	        {
            	        	PushFollow(FOLLOW_valueParams_in_classDecl977);
            	        	valueParams(true);
            	        	state.followingStackPointer--;
            	        	if (state.failed) return ;

            	        }
            	        break;

            	}

            	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:308:5: ( specification[true] )?
            	int alt27 = 2;
            	int LA27_0 = input.LA(1);

            	if ( (LA27_0 == Specification) )
            	{
            	    alt27 = 1;
            	}
            	switch (alt27) 
            	{
            	    case 1 :
            	        // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:308:6: specification[true]
            	        {
            	        	PushFollow(FOLLOW_specification_in_classDecl987);
            	        	specification(true);
            	        	state.followingStackPointer--;
            	        	if (state.failed) return ;

            	        }
            	        break;

            	}

            	PushFollow(FOLLOW_classBody_in_classDecl994);
            	classBody();
            	state.followingStackPointer--;
            	if (state.failed) return ;
            	if ( (state.backtracking==0) )
            	{

            	  		this.classDefinition = oldClassDef;
            	  		
            	  		ctx.Pop(); //prolog/epilog
            	  		ctx.Pop(); //class
            	  		
            	}

            	Match(input, Token.UP, null); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "classDecl"


    // $ANTLR start "classBody"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:319:1: classBody : ^( ClassBody prolog ( epilog )? ) ;
    public void classBody() // throws RecognitionException [1]
    {   

        bool oldClassDef = this.classDefinition;

        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:323:2: ( ^( ClassBody prolog ( epilog )? ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:323:4: ^( ClassBody prolog ( epilog )? )
            {
            	Match(input,ClassBody,FOLLOW_ClassBody_in_classBody1022); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	PushFollow(FOLLOW_prolog_in_classBody1027);
            	prolog();
            	state.followingStackPointer--;
            	if (state.failed) return ;
            	if ( (state.backtracking==0) )
            	{

            	  	    	classDefinition = false;
            	  	    	
            	}
            	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:328:3: ( epilog )?
            	int alt28 = 2;
            	int LA28_0 = input.LA(1);

            	if ( (LA28_0 == Epilog) )
            	{
            	    alt28 = 1;
            	}
            	switch (alt28) 
            	{
            	    case 1 :
            	        // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:328:3: epilog
            	        {
            	        	PushFollow(FOLLOW_epilog_in_classBody1042);
            	        	epilog();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return ;

            	        }
            	        break;

            	}


            	Match(input, Token.UP, null); if (state.failed) return ;
            	if ( (state.backtracking==0) )
            	{

            	  	    	classDefinition = oldClassDef;
            	  	    	
            	}

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "classBody"


    // $ANTLR start "prolog"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:334:1: prolog : ^(p= Prolog ( declaration )* ( statement )* ) ;
    public void prolog() // throws RecognitionException [1]
    {   
        SimSharpTreeNode p = null;

        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:334:8: ( ^(p= Prolog ( declaration )* ( statement )* ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:334:10: ^(p= Prolog ( declaration )* ( statement )* )
            {
            	p=(SimSharpTreeNode)Match(input,Prolog,FOLLOW_Prolog_in_prolog1066); if (state.failed) return ;

            	if ( (state.backtracking==0) )
            	{

            	  		ctx.Pop();   //ctor
            	  	  	MethodSymbol prolog = ctx.CurrentType.AddMethod("Prolog", SymbolTable.NoType);
            	  	  	prolog.Virtual = true;
            	  	  	ctx.Push(prolog);
            	  		p.Symbol = prolog;
            	  		
            	}

            	if ( input.LA(1) == Token.DOWN )
            	{
            	    Match(input, Token.DOWN, null); if (state.failed) return ;
            	    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:342:3: ( declaration )*
            	    do 
            	    {
            	        int alt29 = 2;
            	        int LA29_0 = input.LA(1);

            	        if ( (LA29_0 == VarDecl || LA29_0 == ProcDecl || LA29_0 == ClassDecl || LA29_0 == ArrayDecl || LA29_0 == SWITCH) )
            	        {
            	            alt29 = 1;
            	        }


            	        switch (alt29) 
            	    	{
            	    		case 1 :
            	    		    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:342:3: declaration
            	    		    {
            	    		    	PushFollow(FOLLOW_declaration_in_prolog1075);
            	    		    	declaration();
            	    		    	state.followingStackPointer--;
            	    		    	if (state.failed) return ;

            	    		    }
            	    		    break;

            	    		default:
            	    		    goto loop29;
            	        }
            	    } while (true);

            	    loop29:
            	    	;	// Stops C# compiler whining that label 'loop29' has no statements

            	    if ( (state.backtracking==0) )
            	    {

            	      	    	classDefinition = false;
            	      	    	
            	    }
            	    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:346:3: ( statement )*
            	    do 
            	    {
            	        int alt30 = 2;
            	        int LA30_0 = input.LA(1);

            	        if ( (LA30_0 == Block || LA30_0 == CompoundStatement || LA30_0 == MethCall || (LA30_0 >= Label && LA30_0 <= GoTo) || LA30_0 == PrefixedBlock || (LA30_0 >= VALASSIGN && LA30_0 <= REFASSIGN) || LA30_0 == IF || LA30_0 == WHILE || LA30_0 == FOR || LA30_0 == INSPECT || LA30_0 == NEW) )
            	        {
            	            alt30 = 1;
            	        }


            	        switch (alt30) 
            	    	{
            	    		case 1 :
            	    		    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:346:3: statement
            	    		    {
            	    		    	PushFollow(FOLLOW_statement_in_prolog1091);
            	    		    	statement();
            	    		    	state.followingStackPointer--;
            	    		    	if (state.failed) return ;

            	    		    }
            	    		    break;

            	    		default:
            	    		    goto loop30;
            	        }
            	    } while (true);

            	    loop30:
            	    	;	// Stops C# compiler whining that label 'loop30' has no statements


            	    Match(input, Token.UP, null); if (state.failed) return ;
            	}

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "prolog"


    // $ANTLR start "epilog"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:349:1: epilog : ^(e= Epilog ( statement )* ) ;
    public void epilog() // throws RecognitionException [1]
    {   
        SimSharpTreeNode e = null;

        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:349:9: ( ^(e= Epilog ( statement )* ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:349:11: ^(e= Epilog ( statement )* )
            {
            	e=(SimSharpTreeNode)Match(input,Epilog,FOLLOW_Epilog_in_epilog1108); if (state.failed) return ;

            	if ( (state.backtracking==0) )
            	{

            	  		//pop off the prolog)
            	  		ctx.Pop(); 
            	  		
            	  		//then we push the epilog
            	  		MethodSymbol epilog = ctx.Scope.AddMethod("Epilog", SymbolTable.NoType);
            	  		epilog.Virtual = true; 
            	  		ctx.Push(epilog);
            	  		e.Symbol = epilog;
            	  		
            	}

            	if ( input.LA(1) == Token.DOWN )
            	{
            	    Match(input, Token.DOWN, null); if (state.failed) return ;
            	    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:360:3: ( statement )*
            	    do 
            	    {
            	        int alt31 = 2;
            	        int LA31_0 = input.LA(1);

            	        if ( (LA31_0 == Block || LA31_0 == CompoundStatement || LA31_0 == MethCall || (LA31_0 >= Label && LA31_0 <= GoTo) || LA31_0 == PrefixedBlock || (LA31_0 >= VALASSIGN && LA31_0 <= REFASSIGN) || LA31_0 == IF || LA31_0 == WHILE || LA31_0 == FOR || LA31_0 == INSPECT || LA31_0 == NEW) )
            	        {
            	            alt31 = 1;
            	        }


            	        switch (alt31) 
            	    	{
            	    		case 1 :
            	    		    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:360:3: statement
            	    		    {
            	    		    	PushFollow(FOLLOW_statement_in_epilog1117);
            	    		    	statement();
            	    		    	state.followingStackPointer--;
            	    		    	if (state.failed) return ;

            	    		    }
            	    		    break;

            	    		default:
            	    		    goto loop31;
            	        }
            	    } while (true);

            	    loop31:
            	    	;	// Stops C# compiler whining that label 'loop31' has no statements


            	    Match(input, Token.UP, null); if (state.failed) return ;
            	}

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "epilog"


    // $ANTLR start "varDecl"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:363:1: varDecl : ^( VarDecl t= type ( ^( TypeList (i= ID | ^( ConstElement i= ID r= NUM_REAL ) )* ) ) ) ;
    public void varDecl() // throws RecognitionException [1]
    {   
        SimSharpTreeNode i = null;
        SimSharpTreeNode r = null;
        TypeSymbol t = default(TypeSymbol);


        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:363:9: ( ^( VarDecl t= type ( ^( TypeList (i= ID | ^( ConstElement i= ID r= NUM_REAL ) )* ) ) ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:363:11: ^( VarDecl t= type ( ^( TypeList (i= ID | ^( ConstElement i= ID r= NUM_REAL ) )* ) ) )
            {
            	Match(input,VarDecl,FOLLOW_VarDecl_in_varDecl1131); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	PushFollow(FOLLOW_type_in_varDecl1135);
            	t = type();
            	state.followingStackPointer--;
            	if (state.failed) return ;
            	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:364:3: ( ^( TypeList (i= ID | ^( ConstElement i= ID r= NUM_REAL ) )* ) )
            	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:364:4: ^( TypeList (i= ID | ^( ConstElement i= ID r= NUM_REAL ) )* )
            	{
            		Match(input,TypeList,FOLLOW_TypeList_in_varDecl1142); if (state.failed) return ;

            		if ( input.LA(1) == Token.DOWN )
            		{
            		    Match(input, Token.DOWN, null); if (state.failed) return ;
            		    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:365:4: (i= ID | ^( ConstElement i= ID r= NUM_REAL ) )*
            		    do 
            		    {
            		        int alt32 = 3;
            		        int LA32_0 = input.LA(1);

            		        if ( (LA32_0 == ID) )
            		        {
            		            alt32 = 1;
            		        }
            		        else if ( (LA32_0 == ConstElement) )
            		        {
            		            alt32 = 2;
            		        }


            		        switch (alt32) 
            		    	{
            		    		case 1 :
            		    		    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:365:5: i= ID
            		    		    {
            		    		    	i=(SimSharpTreeNode)Match(input,ID,FOLLOW_ID_in_varDecl1151); if (state.failed) return ;
            		    		    	if ( (state.backtracking==0) )
            		    		    	{

            		    		    	  			if (classDefinition)
            		    		    	  			  i.Symbol = ctx.CurrentType.AddField(i.Text, t);
            		    		    	  			else
            		    		    	  			  i.Symbol= ctx.Scope.AddVariable(i.Text, t); 
            		    		    	  			
            		    		    	}

            		    		    }
            		    		    break;
            		    		case 2 :
            		    		    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:372:6: ^( ConstElement i= ID r= NUM_REAL )
            		    		    {
            		    		    	Match(input,ConstElement,FOLLOW_ConstElement_in_varDecl1165); if (state.failed) return ;

            		    		    	Match(input, Token.DOWN, null); if (state.failed) return ;
            		    		    	i=(SimSharpTreeNode)Match(input,ID,FOLLOW_ID_in_varDecl1169); if (state.failed) return ;
            		    		    	r=(SimSharpTreeNode)Match(input,NUM_REAL,FOLLOW_NUM_REAL_in_varDecl1173); if (state.failed) return ;
            		    		    	if ( (state.backtracking==0) )
            		    		    	{

            		    		    	  			   	  Symbol sym = new LitteralSymbol(LitteralSymbol.Kind.REAL, ((r != null) ? r.Text : null));
            		    		    	  	  			  i.Symbol = sym;
            		    		    	  	  			  ctx.Scope.Add(i.Text, sym);
            		    		    	  			   
            		    		    	}

            		    		    	Match(input, Token.UP, null); if (state.failed) return ;

            		    		    }
            		    		    break;

            		    		default:
            		    		    goto loop32;
            		        }
            		    } while (true);

            		    loop32:
            		    	;	// Stops C# compiler whining that label 'loop32' has no statements


            		    Match(input, Token.UP, null); if (state.failed) return ;
            		}

            	}


            	Match(input, Token.UP, null); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "varDecl"


    // $ANTLR start "procDecl"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:386:1: procDecl : ^( ProcDecl (t= type )? i= ID ( formalParameters[false] )? ( nameParams )? ( valueParams[false] )? ( specification[false] )? procBody ) ;
    public void procDecl() // throws RecognitionException [1]
    {   
        SimSharpTreeNode i = null;
        TypeSymbol t = default(TypeSymbol);


         
         TypeSymbol procType = SymbolTable.NoType;
         bool oldClassDef = classDefinition;

        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:391:2: ( ^( ProcDecl (t= type )? i= ID ( formalParameters[false] )? ( nameParams )? ( valueParams[false] )? ( specification[false] )? procBody ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:391:4: ^( ProcDecl (t= type )? i= ID ( formalParameters[false] )? ( nameParams )? ( valueParams[false] )? ( specification[false] )? procBody )
            {
            	Match(input,ProcDecl,FOLLOW_ProcDecl_in_procDecl1234); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:392:3: (t= type )?
            	int alt33 = 2;
            	int LA33_0 = input.LA(1);

            	if ( (LA33_0 == Type) )
            	{
            	    alt33 = 1;
            	}
            	switch (alt33) 
            	{
            	    case 1 :
            	        // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:392:4: t= type
            	        {
            	        	PushFollow(FOLLOW_type_in_procDecl1241);
            	        	t = type();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return ;
            	        	if ( (state.backtracking==0) )
            	        	{
            	        	   procType = t; 
            	        	}

            	        }
            	        break;

            	}

            	i=(SimSharpTreeNode)Match(input,ID,FOLLOW_ID_in_procDecl1253); if (state.failed) return ;
            	if ( (state.backtracking==0) )
            	{
            	   
            	  	  	MethodSymbol m = ctx.CurrentType.AddMethod(i.Text, procType); 
            	  	  	ctx.Push(m);
            	  	  	i.Symbol = m;
            	  	  	
            	  	  	if (procType != SymbolTable.NoType)
            	  			m.AddVariable("_retVal", procType);
            	  	  	
            	}
            	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:402:5: ( formalParameters[false] )?
            	int alt34 = 2;
            	int LA34_0 = input.LA(1);

            	if ( (LA34_0 == FormalParameters) )
            	{
            	    alt34 = 1;
            	}
            	switch (alt34) 
            	{
            	    case 1 :
            	        // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:402:6: formalParameters[false]
            	        {
            	        	PushFollow(FOLLOW_formalParameters_in_procDecl1267);
            	        	formalParameters(false);
            	        	state.followingStackPointer--;
            	        	if (state.failed) return ;

            	        }
            	        break;

            	}

            	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:403:5: ( nameParams )?
            	int alt35 = 2;
            	int LA35_0 = input.LA(1);

            	if ( (LA35_0 == NAME) )
            	{
            	    alt35 = 1;
            	}
            	switch (alt35) 
            	{
            	    case 1 :
            	        // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:403:6: nameParams
            	        {
            	        	PushFollow(FOLLOW_nameParams_in_procDecl1277);
            	        	nameParams();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return ;

            	        }
            	        break;

            	}

            	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:404:5: ( valueParams[false] )?
            	int alt36 = 2;
            	int LA36_0 = input.LA(1);

            	if ( (LA36_0 == VALUE) )
            	{
            	    alt36 = 1;
            	}
            	switch (alt36) 
            	{
            	    case 1 :
            	        // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:404:6: valueParams[false]
            	        {
            	        	PushFollow(FOLLOW_valueParams_in_procDecl1286);
            	        	valueParams(false);
            	        	state.followingStackPointer--;
            	        	if (state.failed) return ;

            	        }
            	        break;

            	}

            	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:405:5: ( specification[false] )?
            	int alt37 = 2;
            	int LA37_0 = input.LA(1);

            	if ( (LA37_0 == Specification) )
            	{
            	    alt37 = 1;
            	}
            	switch (alt37) 
            	{
            	    case 1 :
            	        // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:405:6: specification[false]
            	        {
            	        	PushFollow(FOLLOW_specification_in_procDecl1296);
            	        	specification(false);
            	        	state.followingStackPointer--;
            	        	if (state.failed) return ;

            	        }
            	        break;

            	}

            	if ( (state.backtracking==0) )
            	{

            	  	  	classDefinition = false;
            	  	  	
            	}
            	PushFollow(FOLLOW_procBody_in_procDecl1311);
            	procBody();
            	state.followingStackPointer--;
            	if (state.failed) return ;
            	if ( (state.backtracking==0) )
            	{

            	  	  	classDefinition = oldClassDef;
            	  	  	
            	}

            	Match(input, Token.UP, null); if (state.failed) return ;
            	if ( (state.backtracking==0) )
            	{
            	   ctx.Pop(); 
            	}

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "procDecl"


    // $ANTLR start "formalParameters"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:418:1: formalParameters[bool constructor] : ^( FormalParameters (i= ID )* ) ;
    public void formalParameters(bool constructor) // throws RecognitionException [1]
    {   
        SimSharpTreeNode i = null;

        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:419:2: ( ^( FormalParameters (i= ID )* ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:419:4: ^( FormalParameters (i= ID )* )
            {
            	Match(input,FormalParameters,FOLLOW_FormalParameters_in_formalParameters1350); if (state.failed) return ;

            	if ( input.LA(1) == Token.DOWN )
            	{
            	    Match(input, Token.DOWN, null); if (state.failed) return ;
            	    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:420:3: (i= ID )*
            	    do 
            	    {
            	        int alt38 = 2;
            	        int LA38_0 = input.LA(1);

            	        if ( (LA38_0 == ID) )
            	        {
            	            alt38 = 1;
            	        }


            	        switch (alt38) 
            	    	{
            	    		case 1 :
            	    		    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:420:4: i= ID
            	    		    {
            	    		    	i=(SimSharpTreeNode)Match(input,ID,FOLLOW_ID_in_formalParameters1358); if (state.failed) return ;
            	    		    	if ( (state.backtracking==0) )
            	    		    	{

            	    		    	  		string name = null;
            	    		    	  		if (constructor) name = "_" + i.Text;
            	    		    	  		else name = i.Text;
            	    		    	  		
            	    		    	  		i.Symbol = ctx.Scope.AddArgument(name, null);
            	    		    	  		
            	    		    	}

            	    		    }
            	    		    break;

            	    		default:
            	    		    goto loop38;
            	        }
            	    } while (true);

            	    loop38:
            	    	;	// Stops C# compiler whining that label 'loop38' has no statements


            	    Match(input, Token.UP, null); if (state.failed) return ;
            	}

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "formalParameters"


    // $ANTLR start "valueParams"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:433:1: valueParams[bool constructor] : ^( VALUE (i= ID )* ) ;
    public void valueParams(bool constructor) // throws RecognitionException [1]
    {   
        SimSharpTreeNode i = null;

        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:434:2: ( ^( VALUE (i= ID )* ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:434:4: ^( VALUE (i= ID )* )
            {
            	Match(input,VALUE,FOLLOW_VALUE_in_valueParams1389); if (state.failed) return ;

            	if ( input.LA(1) == Token.DOWN )
            	{
            	    Match(input, Token.DOWN, null); if (state.failed) return ;
            	    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:435:3: (i= ID )*
            	    do 
            	    {
            	        int alt39 = 2;
            	        int LA39_0 = input.LA(1);

            	        if ( (LA39_0 == ID) )
            	        {
            	            alt39 = 1;
            	        }


            	        switch (alt39) 
            	    	{
            	    		case 1 :
            	    		    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:435:4: i= ID
            	    		    {
            	    		    	i=(SimSharpTreeNode)Match(input,ID,FOLLOW_ID_in_valueParams1396); if (state.failed) return ;
            	    		    	if ( (state.backtracking==0) )
            	    		    	{

            	    		    	  		string name = null;
            	    		    	  		if (constructor) name = "_" + i.Text;
            	    		    	  		else name = i.Text;
            	    		    	  		
            	    		    	  		ArgumentSymbol arg = ctx.Scope.ResolveArgument(name);
            	    		    	  		if (arg != null)
            	    		    	  		  arg.ValueParam = true;
            	    		    	  		else errMan.ReportError("Semantic", i.Line, i.CharPositionInLine, "Unrecognized parameter '" + i.Text + "'");
            	    		    	  		
            	    		    	}

            	    		    }
            	    		    break;

            	    		default:
            	    		    goto loop39;
            	        }
            	    } while (true);

            	    loop39:
            	    	;	// Stops C# compiler whining that label 'loop39' has no statements


            	    Match(input, Token.UP, null); if (state.failed) return ;
            	}

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "valueParams"


    // $ANTLR start "nameParams"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:450:1: nameParams : ^( NAME (i= ID )* ) ;
    public void nameParams() // throws RecognitionException [1]
    {   
        SimSharpTreeNode i = null;

        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:451:2: ( ^( NAME (i= ID )* ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:451:4: ^( NAME (i= ID )* )
            {
            	Match(input,NAME,FOLLOW_NAME_in_nameParams1424); if (state.failed) return ;

            	if ( input.LA(1) == Token.DOWN )
            	{
            	    Match(input, Token.DOWN, null); if (state.failed) return ;
            	    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:452:3: (i= ID )*
            	    do 
            	    {
            	        int alt40 = 2;
            	        int LA40_0 = input.LA(1);

            	        if ( (LA40_0 == ID) )
            	        {
            	            alt40 = 1;
            	        }


            	        switch (alt40) 
            	    	{
            	    		case 1 :
            	    		    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:452:4: i= ID
            	    		    {
            	    		    	i=(SimSharpTreeNode)Match(input,ID,FOLLOW_ID_in_nameParams1432); if (state.failed) return ;
            	    		    	if ( (state.backtracking==0) )
            	    		    	{

            	    		    	  		ArgumentSymbol arg = ctx.Scope.ResolveArgument(i.Text);
            	    		    	  		if (arg != null)
            	    		    	  		  arg.NameParam = true;
            	    		    	  		else errMan.ReportError("Semantic", i.Line, i.CharPositionInLine, "Unrecognized parameter '" + i.Text + "'");
            	    		    	  		
            	    		    	}

            	    		    }
            	    		    break;

            	    		default:
            	    		    goto loop40;
            	        }
            	    } while (true);

            	    loop40:
            	    	;	// Stops C# compiler whining that label 'loop40' has no statements


            	    Match(input, Token.UP, null); if (state.failed) return ;
            	}

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "nameParams"


    // $ANTLR start "specification"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:463:1: specification[bool constructor] : ^( Specification (t= type (i= ID )+ )+ ) ;
    public void specification(bool constructor) // throws RecognitionException [1]
    {   
        SimSharpTreeNode i = null;
        TypeSymbol t = default(TypeSymbol);


        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:464:2: ( ^( Specification (t= type (i= ID )+ )+ ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:464:4: ^( Specification (t= type (i= ID )+ )+ )
            {
            	Match(input,Specification,FOLLOW_Specification_in_specification1461); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:465:3: (t= type (i= ID )+ )+
            	int cnt42 = 0;
            	do 
            	{
            	    int alt42 = 2;
            	    int LA42_0 = input.LA(1);

            	    if ( (LA42_0 == Type) )
            	    {
            	        alt42 = 1;
            	    }


            	    switch (alt42) 
            		{
            			case 1 :
            			    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:465:4: t= type (i= ID )+
            			    {
            			    	PushFollow(FOLLOW_type_in_specification1468);
            			    	t = type();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return ;
            			    	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:466:4: (i= ID )+
            			    	int cnt41 = 0;
            			    	do 
            			    	{
            			    	    int alt41 = 2;
            			    	    int LA41_0 = input.LA(1);

            			    	    if ( (LA41_0 == ID) )
            			    	    {
            			    	        alt41 = 1;
            			    	    }


            			    	    switch (alt41) 
            			    		{
            			    			case 1 :
            			    			    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:466:5: i= ID
            			    			    {
            			    			    	i=(SimSharpTreeNode)Match(input,ID,FOLLOW_ID_in_specification1477); if (state.failed) return ;
            			    			    	if ( (state.backtracking==0) )
            			    			    	{

            			    			    	  			string name;
            			    			    	  			if (constructor) name = "_" + i.Text;
            			    			    	  			else name = i.Text;
            			    			    	  			
            			    			    	  			ArgumentSymbol arg = ctx.Scope.ResolveArgument(name);
            			    			    	  			if (arg != null) 
            			    			    	  			{
            			    			    	  			  arg.Type = t;
            			    			    	  			  if (constructor) ctx.CurrentType.AddField(i.Text, arg.Type);
            			    			    	  			}
            			    			    	  			else errMan.ReportError("Semantic", i.Line, i.CharPositionInLine, "Unrecognized parameter '" + i.Text + "'");
            			    			    	  			
            			    			    	}

            			    			    }
            			    			    break;

            			    			default:
            			    			    if ( cnt41 >= 1 ) goto loop41;
            			    			    if ( state.backtracking > 0 ) {state.failed = true; return ;}
            			    		            EarlyExitException eee41 =
            			    		                new EarlyExitException(41, input);
            			    		            throw eee41;
            			    	    }
            			    	    cnt41++;
            			    	} while (true);

            			    	loop41:
            			    		;	// Stops C# compiler whinging that label 'loop41' has no statements


            			    }
            			    break;

            			default:
            			    if ( cnt42 >= 1 ) goto loop42;
            			    if ( state.backtracking > 0 ) {state.failed = true; return ;}
            		            EarlyExitException eee42 =
            		                new EarlyExitException(42, input);
            		            throw eee42;
            	    }
            	    cnt42++;
            	} while (true);

            	loop42:
            		;	// Stops C# compiler whinging that label 'loop42' has no statements


            	Match(input, Token.UP, null); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "specification"


    // $ANTLR start "procBody"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:485:1: procBody : ^( ProcBody statement ) ;
    public void procBody() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:485:9: ( ^( ProcBody statement ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:485:11: ^( ProcBody statement )
            {
            	Match(input,ProcBody,FOLLOW_ProcBody_in_procBody1510); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	PushFollow(FOLLOW_statement_in_procBody1512);
            	statement();
            	state.followingStackPointer--;
            	if (state.failed) return ;

            	Match(input, Token.UP, null); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "procBody"


    // $ANTLR start "type"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:488:1: type returns [TypeSymbol typesym] : ^( Type ( INTEGER | TEXT | REAL | CHARACTER | REF i= ID | BOOLEAN ) ) ;
    public TypeSymbol type() // throws RecognitionException [1]
    {   
        TypeSymbol typesym = default(TypeSymbol);

        SimSharpTreeNode i = null;

        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:489:2: ( ^( Type ( INTEGER | TEXT | REAL | CHARACTER | REF i= ID | BOOLEAN ) ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:489:4: ^( Type ( INTEGER | TEXT | REAL | CHARACTER | REF i= ID | BOOLEAN ) )
            {
            	Match(input,Type,FOLLOW_Type_in_type1528); if (state.failed) return typesym;

            	Match(input, Token.DOWN, null); if (state.failed) return typesym;
            	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:489:11: ( INTEGER | TEXT | REAL | CHARACTER | REF i= ID | BOOLEAN )
            	int alt43 = 6;
            	switch ( input.LA(1) ) 
            	{
            	case INTEGER:
            		{
            	    alt43 = 1;
            	    }
            	    break;
            	case TEXT:
            		{
            	    alt43 = 2;
            	    }
            	    break;
            	case REAL:
            		{
            	    alt43 = 3;
            	    }
            	    break;
            	case CHARACTER:
            		{
            	    alt43 = 4;
            	    }
            	    break;
            	case REF:
            		{
            	    alt43 = 5;
            	    }
            	    break;
            	case BOOLEAN:
            		{
            	    alt43 = 6;
            	    }
            	    break;
            		default:
            		    if ( state.backtracking > 0 ) {state.failed = true; return typesym;}
            		    NoViableAltException nvae_d43s0 =
            		        new NoViableAltException("", 43, 0, input);

            		    throw nvae_d43s0;
            	}

            	switch (alt43) 
            	{
            	    case 1 :
            	        // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:489:12: INTEGER
            	        {
            	        	Match(input,INTEGER,FOLLOW_INTEGER_in_type1531); if (state.failed) return typesym;
            	        	if ( (state.backtracking==0) )
            	        	{
            	        	   typesym =  SymbolTable.Integer;
            	        	}

            	        }
            	        break;
            	    case 2 :
            	        // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:490:5: TEXT
            	        {
            	        	Match(input,TEXT,FOLLOW_TEXT_in_type1539); if (state.failed) return typesym;
            	        	if ( (state.backtracking==0) )
            	        	{
            	        	   typesym =  SymbolTable.Text;
            	        	}

            	        }
            	        break;
            	    case 3 :
            	        // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:491:5: REAL
            	        {
            	        	Match(input,REAL,FOLLOW_REAL_in_type1549); if (state.failed) return typesym;
            	        	if ( (state.backtracking==0) )
            	        	{
            	        	   typesym =  SymbolTable.Real;
            	        	}

            	        }
            	        break;
            	    case 4 :
            	        // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:492:5: CHARACTER
            	        {
            	        	Match(input,CHARACTER,FOLLOW_CHARACTER_in_type1558); if (state.failed) return typesym;
            	        	if ( (state.backtracking==0) )
            	        	{
            	        	   typesym =  SymbolTable.Character;
            	        	}

            	        }
            	        break;
            	    case 5 :
            	        // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:493:5: REF i= ID
            	        {
            	        	Match(input,REF,FOLLOW_REF_in_type1566); if (state.failed) return typesym;
            	        	i=(SimSharpTreeNode)Match(input,ID,FOLLOW_ID_in_type1570); if (state.failed) return typesym;
            	        	if ( (state.backtracking==0) )
            	        	{
            	        	   typesym =  ctx.Scope.ResolveType(i.Text); 
            	        	}

            	        }
            	        break;
            	    case 6 :
            	        // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:494:5: BOOLEAN
            	        {
            	        	Match(input,BOOLEAN,FOLLOW_BOOLEAN_in_type1578); if (state.failed) return typesym;
            	        	if ( (state.backtracking==0) )
            	        	{
            	        	   typesym =  SymbolTable.Boolean; 
            	        	}

            	        }
            	        break;

            	}


            	Match(input, Token.UP, null); if (state.failed) return typesym;

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return typesym;
    }
    // $ANTLR end "type"


    // $ANTLR start "refAssignment"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:499:1: refAssignment : ^(op= REFASSIGN d= lvalue s= expression ) ;
    public void refAssignment() // throws RecognitionException [1]
    {   
        SimSharpTreeNode op = null;

        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:500:2: ( ^(op= REFASSIGN d= lvalue s= expression ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:500:4: ^(op= REFASSIGN d= lvalue s= expression )
            {
            	op=(SimSharpTreeNode)Match(input,REFASSIGN,FOLLOW_REFASSIGN_in_refAssignment1605); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	PushFollow(FOLLOW_lvalue_in_refAssignment1611);
            	lvalue();
            	state.followingStackPointer--;
            	if (state.failed) return ;
            	PushFollow(FOLLOW_expression_in_refAssignment1617);
            	expression();
            	state.followingStackPointer--;
            	if (state.failed) return ;

            	Match(input, Token.UP, null); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "refAssignment"


    // $ANTLR start "valueAssignment"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:505:1: valueAssignment : ^(op= VALASSIGN d= lvalue s= ( expression ) ) ;
    public void valueAssignment() // throws RecognitionException [1]
    {   
        SimSharpTreeNode op = null;
        SimSharpTreeNode s = null;

        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:506:2: ( ^(op= VALASSIGN d= lvalue s= ( expression ) ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:506:4: ^(op= VALASSIGN d= lvalue s= ( expression ) )
            {
            	op=(SimSharpTreeNode)Match(input,VALASSIGN,FOLLOW_VALASSIGN_in_valueAssignment1633); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	PushFollow(FOLLOW_lvalue_in_valueAssignment1639);
            	lvalue();
            	state.followingStackPointer--;
            	if (state.failed) return ;
            	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:508:5: ( expression )
            	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:508:6: expression
            	{
            		PushFollow(FOLLOW_expression_in_valueAssignment1647);
            		expression();
            		state.followingStackPointer--;
            		if (state.failed) return ;

            	}


            	Match(input, Token.UP, null); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "valueAssignment"


    // $ANTLR start "lvalue"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:512:1: lvalue : ( ( ID arrayParams )=> arrayAssign | remoteAssign | ID );
    public void lvalue() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:512:8: ( ( ID arrayParams )=> arrayAssign | remoteAssign | ID )
            int alt44 = 3;
            int LA44_0 = input.LA(1);

            if ( (LA44_0 == ID) )
            {
                int LA44_1 = input.LA(2);

                if ( (synpred1_SimSharpAnalyse()) )
                {
                    alt44 = 1;
                }
                else if ( (true) )
                {
                    alt44 = 3;
                }
                else 
                {
                    if ( state.backtracking > 0 ) {state.failed = true; return ;}
                    NoViableAltException nvae_d44s1 =
                        new NoViableAltException("", 44, 1, input);

                    throw nvae_d44s1;
                }
            }
            else if ( (LA44_0 == RemoteAssign) )
            {
                alt44 = 2;
            }
            else 
            {
                if ( state.backtracking > 0 ) {state.failed = true; return ;}
                NoViableAltException nvae_d44s0 =
                    new NoViableAltException("", 44, 0, input);

                throw nvae_d44s0;
            }
            switch (alt44) 
            {
                case 1 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:512:10: ( ID arrayParams )=> arrayAssign
                    {
                    	PushFollow(FOLLOW_arrayAssign_in_lvalue1671);
                    	arrayAssign();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    }
                    break;
                case 2 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:513:4: remoteAssign
                    {
                    	PushFollow(FOLLOW_remoteAssign_in_lvalue1676);
                    	remoteAssign();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    }
                    break;
                case 3 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:514:4: ID
                    {
                    	Match(input,ID,FOLLOW_ID_in_lvalue1682); if (state.failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "lvalue"


    // $ANTLR start "arrayParams"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:517:1: arrayParams : ^( ActualParameters ( expression )+ ) ;
    public void arrayParams() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:518:2: ( ^( ActualParameters ( expression )+ ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:519:4: ^( ActualParameters ( expression )+ )
            {
            	Match(input,ActualParameters,FOLLOW_ActualParameters_in_arrayParams1699); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	// C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:519:23: ( expression )+
            	int cnt45 = 0;
            	do 
            	{
            	    int alt45 = 2;
            	    alt45 = dfa45.Predict(input);
            	    switch (alt45) 
            		{
            			case 1 :
            			    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:519:23: expression
            			    {
            			    	PushFollow(FOLLOW_expression_in_arrayParams1701);
            			    	expression();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return ;

            			    }
            			    break;

            			default:
            			    if ( cnt45 >= 1 ) goto loop45;
            			    if ( state.backtracking > 0 ) {state.failed = true; return ;}
            		            EarlyExitException eee45 =
            		                new EarlyExitException(45, input);
            		            throw eee45;
            	    }
            	    cnt45++;
            	} while (true);

            	loop45:
            		;	// Stops C# compiler whinging that label 'loop45' has no statements


            	Match(input, Token.UP, null); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "arrayParams"


    // $ANTLR start "remoteAssign"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:522:1: remoteAssign : ^( RemoteAssign expression ID ) ;
    public void remoteAssign() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:523:2: ( ^( RemoteAssign expression ID ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:523:4: ^( RemoteAssign expression ID )
            {
            	Match(input,RemoteAssign,FOLLOW_RemoteAssign_in_remoteAssign1716); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	PushFollow(FOLLOW_expression_in_remoteAssign1718);
            	expression();
            	state.followingStackPointer--;
            	if (state.failed) return ;
            	Match(input,ID,FOLLOW_ID_in_remoteAssign1720); if (state.failed) return ;

            	Match(input, Token.UP, null); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "remoteAssign"


    // $ANTLR start "arrayAssign"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:526:1: arrayAssign : ID actualParams ;
    public void arrayAssign() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:527:2: ( ID actualParams )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:527:4: ID actualParams
            {
            	Match(input,ID,FOLLOW_ID_in_arrayAssign1733); if (state.failed) return ;
            	PushFollow(FOLLOW_actualParams_in_arrayAssign1735);
            	actualParams();
            	state.followingStackPointer--;
            	if (state.failed) return ;

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "arrayAssign"


    // $ANTLR start "expression"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:530:1: expression : ( primary | ^( valueRelationalOperator expression expression ) | ^( Unary MINUS expression ) | ^( CONCAT expression expression ) | ^( MINUS expression expression ) | ^( PLUS expression expression ) | ^( TIMES expression expression ) | ^( INTDIV expression expression ) | ^( EXP expression expression ) | ^( NOT expression ) | ^( RemoteAccess expression id ) | objectGenerator | ^( REFNEQ expression expression ) | ^( REFEQ expression expression ) | ^( IS expression id ) | ^( IN expression id ) | ^( booleanOperator expression expression ) | refAssignment | ^( QUA expression ID ) | ^( THIS ID ) );
    public void expression() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:531:2: ( primary | ^( valueRelationalOperator expression expression ) | ^( Unary MINUS expression ) | ^( CONCAT expression expression ) | ^( MINUS expression expression ) | ^( PLUS expression expression ) | ^( TIMES expression expression ) | ^( INTDIV expression expression ) | ^( EXP expression expression ) | ^( NOT expression ) | ^( RemoteAccess expression id ) | objectGenerator | ^( REFNEQ expression expression ) | ^( REFEQ expression expression ) | ^( IS expression id ) | ^( IN expression id ) | ^( booleanOperator expression expression ) | refAssignment | ^( QUA expression ID ) | ^( THIS ID ) )
            int alt46 = 20;
            alt46 = dfa46.Predict(input);
            switch (alt46) 
            {
                case 1 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:531:4: primary
                    {
                    	PushFollow(FOLLOW_primary_in_expression1747);
                    	primary();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    }
                    break;
                case 2 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:532:4: ^( valueRelationalOperator expression expression )
                    {
                    	PushFollow(FOLLOW_valueRelationalOperator_in_expression1753);
                    	valueRelationalOperator();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    	Match(input, Token.DOWN, null); if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_expression1755);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_expression1757);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    	Match(input, Token.UP, null); if (state.failed) return ;

                    }
                    break;
                case 3 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:533:4: ^( Unary MINUS expression )
                    {
                    	Match(input,Unary,FOLLOW_Unary_in_expression1764); if (state.failed) return ;

                    	Match(input, Token.DOWN, null); if (state.failed) return ;
                    	Match(input,MINUS,FOLLOW_MINUS_in_expression1766); if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_expression1768);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    	Match(input, Token.UP, null); if (state.failed) return ;

                    }
                    break;
                case 4 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:534:4: ^( CONCAT expression expression )
                    {
                    	Match(input,CONCAT,FOLLOW_CONCAT_in_expression1775); if (state.failed) return ;

                    	Match(input, Token.DOWN, null); if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_expression1777);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_expression1779);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    	Match(input, Token.UP, null); if (state.failed) return ;

                    }
                    break;
                case 5 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:535:4: ^( MINUS expression expression )
                    {
                    	Match(input,MINUS,FOLLOW_MINUS_in_expression1786); if (state.failed) return ;

                    	Match(input, Token.DOWN, null); if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_expression1788);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_expression1790);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    	Match(input, Token.UP, null); if (state.failed) return ;

                    }
                    break;
                case 6 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:536:4: ^( PLUS expression expression )
                    {
                    	Match(input,PLUS,FOLLOW_PLUS_in_expression1797); if (state.failed) return ;

                    	Match(input, Token.DOWN, null); if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_expression1799);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_expression1801);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    	Match(input, Token.UP, null); if (state.failed) return ;

                    }
                    break;
                case 7 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:537:4: ^( TIMES expression expression )
                    {
                    	Match(input,TIMES,FOLLOW_TIMES_in_expression1808); if (state.failed) return ;

                    	Match(input, Token.DOWN, null); if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_expression1810);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_expression1812);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    	Match(input, Token.UP, null); if (state.failed) return ;

                    }
                    break;
                case 8 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:538:4: ^( INTDIV expression expression )
                    {
                    	Match(input,INTDIV,FOLLOW_INTDIV_in_expression1819); if (state.failed) return ;

                    	Match(input, Token.DOWN, null); if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_expression1821);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_expression1823);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    	Match(input, Token.UP, null); if (state.failed) return ;

                    }
                    break;
                case 9 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:539:4: ^( EXP expression expression )
                    {
                    	Match(input,EXP,FOLLOW_EXP_in_expression1830); if (state.failed) return ;

                    	Match(input, Token.DOWN, null); if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_expression1832);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_expression1834);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    	Match(input, Token.UP, null); if (state.failed) return ;

                    }
                    break;
                case 10 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:540:4: ^( NOT expression )
                    {
                    	Match(input,NOT,FOLLOW_NOT_in_expression1841); if (state.failed) return ;

                    	Match(input, Token.DOWN, null); if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_expression1843);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    	Match(input, Token.UP, null); if (state.failed) return ;

                    }
                    break;
                case 11 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:541:4: ^( RemoteAccess expression id )
                    {
                    	Match(input,RemoteAccess,FOLLOW_RemoteAccess_in_expression1850); if (state.failed) return ;

                    	Match(input, Token.DOWN, null); if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_expression1852);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;
                    	PushFollow(FOLLOW_id_in_expression1854);
                    	id();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    	Match(input, Token.UP, null); if (state.failed) return ;

                    }
                    break;
                case 12 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:542:4: objectGenerator
                    {
                    	PushFollow(FOLLOW_objectGenerator_in_expression1860);
                    	objectGenerator();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    }
                    break;
                case 13 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:543:4: ^( REFNEQ expression expression )
                    {
                    	Match(input,REFNEQ,FOLLOW_REFNEQ_in_expression1866); if (state.failed) return ;

                    	Match(input, Token.DOWN, null); if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_expression1868);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_expression1870);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    	Match(input, Token.UP, null); if (state.failed) return ;

                    }
                    break;
                case 14 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:544:4: ^( REFEQ expression expression )
                    {
                    	Match(input,REFEQ,FOLLOW_REFEQ_in_expression1877); if (state.failed) return ;

                    	Match(input, Token.DOWN, null); if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_expression1879);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_expression1881);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    	Match(input, Token.UP, null); if (state.failed) return ;

                    }
                    break;
                case 15 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:545:4: ^( IS expression id )
                    {
                    	Match(input,IS,FOLLOW_IS_in_expression1888); if (state.failed) return ;

                    	Match(input, Token.DOWN, null); if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_expression1890);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;
                    	PushFollow(FOLLOW_id_in_expression1892);
                    	id();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    	Match(input, Token.UP, null); if (state.failed) return ;

                    }
                    break;
                case 16 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:546:4: ^( IN expression id )
                    {
                    	Match(input,IN,FOLLOW_IN_in_expression1899); if (state.failed) return ;

                    	Match(input, Token.DOWN, null); if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_expression1901);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;
                    	PushFollow(FOLLOW_id_in_expression1903);
                    	id();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    	Match(input, Token.UP, null); if (state.failed) return ;

                    }
                    break;
                case 17 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:547:4: ^( booleanOperator expression expression )
                    {
                    	PushFollow(FOLLOW_booleanOperator_in_expression1910);
                    	booleanOperator();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    	Match(input, Token.DOWN, null); if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_expression1912);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_expression1914);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    	Match(input, Token.UP, null); if (state.failed) return ;

                    }
                    break;
                case 18 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:548:4: refAssignment
                    {
                    	PushFollow(FOLLOW_refAssignment_in_expression1920);
                    	refAssignment();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    }
                    break;
                case 19 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:549:4: ^( QUA expression ID )
                    {
                    	Match(input,QUA,FOLLOW_QUA_in_expression1926); if (state.failed) return ;

                    	Match(input, Token.DOWN, null); if (state.failed) return ;
                    	PushFollow(FOLLOW_expression_in_expression1928);
                    	expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;
                    	Match(input,ID,FOLLOW_ID_in_expression1930); if (state.failed) return ;

                    	Match(input, Token.UP, null); if (state.failed) return ;

                    }
                    break;
                case 20 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:550:4: ^( THIS ID )
                    {
                    	Match(input,THIS,FOLLOW_THIS_in_expression1937); if (state.failed) return ;

                    	Match(input, Token.DOWN, null); if (state.failed) return ;
                    	Match(input,ID,FOLLOW_ID_in_expression1939); if (state.failed) return ;

                    	Match(input, Token.UP, null); if (state.failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "expression"


    // $ANTLR start "objectGenerator"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:553:1: objectGenerator : ^( NEW id ) ;
    public void objectGenerator() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:554:2: ( ^( NEW id ) )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:554:4: ^( NEW id )
            {
            	Match(input,NEW,FOLLOW_NEW_in_objectGenerator1952); if (state.failed) return ;

            	Match(input, Token.DOWN, null); if (state.failed) return ;
            	PushFollow(FOLLOW_id_in_objectGenerator1954);
            	id();
            	state.followingStackPointer--;
            	if (state.failed) return ;

            	Match(input, Token.UP, null); if (state.failed) return ;

            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "objectGenerator"


    // $ANTLR start "booleanOperator"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:557:1: booleanOperator : ( AND | OR | EQV | IMP | AndThen | OrElse );
    public void booleanOperator() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:558:2: ( AND | OR | EQV | IMP | AndThen | OrElse )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:
            {
            	if ( (input.LA(1) >= AndThen && input.LA(1) <= OrElse) || (input.LA(1) >= OR && input.LA(1) <= IMP) ) 
            	{
            	    input.Consume();
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return ;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}


            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "booleanOperator"


    // $ANTLR start "valueRelationalOperator"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:561:1: valueRelationalOperator : ( LT | LE | EQ | GE | GT | NE );
    public void valueRelationalOperator() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:562:2: ( LT | LE | EQ | GE | GT | NE )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:
            {
            	if ( input.LA(1) == EQ || (input.LA(1) >= LT && input.LA(1) <= NE) ) 
            	{
            	    input.Consume();
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return ;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}


            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "valueRelationalOperator"


    // $ANTLR start "primary"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:565:1: primary : ( id | logicalValue | NOTEXT | NONE | n= NUM_INT | c= CHARCONST | r= NUM_REAL | s= STRING );
    public void primary() // throws RecognitionException [1]
    {   
        SimSharpTreeNode n = null;
        SimSharpTreeNode c = null;
        SimSharpTreeNode r = null;
        SimSharpTreeNode s = null;

        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:565:9: ( id | logicalValue | NOTEXT | NONE | n= NUM_INT | c= CHARCONST | r= NUM_REAL | s= STRING )
            int alt47 = 8;
            switch ( input.LA(1) ) 
            {
            case ID:
            	{
                alt47 = 1;
                }
                break;
            case TRUE:
            case FALSE:
            	{
                alt47 = 2;
                }
                break;
            case NOTEXT:
            	{
                alt47 = 3;
                }
                break;
            case NONE:
            	{
                alt47 = 4;
                }
                break;
            case NUM_INT:
            	{
                alt47 = 5;
                }
                break;
            case CHARCONST:
            	{
                alt47 = 6;
                }
                break;
            case NUM_REAL:
            	{
                alt47 = 7;
                }
                break;
            case STRING:
            	{
                alt47 = 8;
                }
                break;
            	default:
            	    if ( state.backtracking > 0 ) {state.failed = true; return ;}
            	    NoViableAltException nvae_d47s0 =
            	        new NoViableAltException("", 47, 0, input);

            	    throw nvae_d47s0;
            }

            switch (alt47) 
            {
                case 1 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:565:11: id
                    {
                    	PushFollow(FOLLOW_id_in_primary2030);
                    	id();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    }
                    break;
                case 2 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:566:4: logicalValue
                    {
                    	PushFollow(FOLLOW_logicalValue_in_primary2035);
                    	logicalValue();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    }
                    break;
                case 3 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:567:4: NOTEXT
                    {
                    	Match(input,NOTEXT,FOLLOW_NOTEXT_in_primary2040); if (state.failed) return ;

                    }
                    break;
                case 4 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:568:4: NONE
                    {
                    	Match(input,NONE,FOLLOW_NONE_in_primary2045); if (state.failed) return ;

                    }
                    break;
                case 5 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:569:4: n= NUM_INT
                    {
                    	n=(SimSharpTreeNode)Match(input,NUM_INT,FOLLOW_NUM_INT_in_primary2052); if (state.failed) return ;

                    }
                    break;
                case 6 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:570:4: c= CHARCONST
                    {
                    	c=(SimSharpTreeNode)Match(input,CHARCONST,FOLLOW_CHARCONST_in_primary2059); if (state.failed) return ;

                    }
                    break;
                case 7 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:571:4: r= NUM_REAL
                    {
                    	r=(SimSharpTreeNode)Match(input,NUM_REAL,FOLLOW_NUM_REAL_in_primary2066); if (state.failed) return ;

                    }
                    break;
                case 8 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:572:4: s= STRING
                    {
                    	s=(SimSharpTreeNode)Match(input,STRING,FOLLOW_STRING_in_primary2073); if (state.failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "primary"


    // $ANTLR start "id"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:575:1: id : ( ( ID actualParams )=> ID actualParams | ID );
    public void id() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:575:4: ( ( ID actualParams )=> ID actualParams | ID )
            int alt48 = 2;
            int LA48_0 = input.LA(1);

            if ( (LA48_0 == ID) )
            {
                int LA48_1 = input.LA(2);

                if ( (synpred2_SimSharpAnalyse()) )
                {
                    alt48 = 1;
                }
                else if ( (true) )
                {
                    alt48 = 2;
                }
                else 
                {
                    if ( state.backtracking > 0 ) {state.failed = true; return ;}
                    NoViableAltException nvae_d48s1 =
                        new NoViableAltException("", 48, 1, input);

                    throw nvae_d48s1;
                }
            }
            else 
            {
                if ( state.backtracking > 0 ) {state.failed = true; return ;}
                NoViableAltException nvae_d48s0 =
                    new NoViableAltException("", 48, 0, input);

                throw nvae_d48s0;
            }
            switch (alt48) 
            {
                case 1 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:575:6: ( ID actualParams )=> ID actualParams
                    {
                    	Match(input,ID,FOLLOW_ID_in_id2092); if (state.failed) return ;
                    	PushFollow(FOLLOW_actualParams_in_id2094);
                    	actualParams();
                    	state.followingStackPointer--;
                    	if (state.failed) return ;

                    }
                    break;
                case 2 :
                    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:577:4: ID
                    {
                    	Match(input,ID,FOLLOW_ID_in_id2100); if (state.failed) return ;

                    }
                    break;

            }
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "id"


    // $ANTLR start "logicalValue"
    // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:580:1: logicalValue : ( TRUE | FALSE );
    public void logicalValue() // throws RecognitionException [1]
    {   
        try 
    	{
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:581:2: ( TRUE | FALSE )
            // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:
            {
            	if ( (input.LA(1) >= TRUE && input.LA(1) <= FALSE) ) 
            	{
            	    input.Consume();
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return ;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}


            }

        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
        }
        finally 
    	{
        }
        return ;
    }
    // $ANTLR end "logicalValue"

    // $ANTLR start "synpred1_SimSharpAnalyse"
    public void synpred1_SimSharpAnalyse_fragment() {
        // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:512:10: ( ID arrayParams )
        // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:512:11: ID arrayParams
        {
        	Match(input,ID,FOLLOW_ID_in_synpred1_SimSharpAnalyse1664); if (state.failed) return ;
        	PushFollow(FOLLOW_arrayParams_in_synpred1_SimSharpAnalyse1666);
        	arrayParams();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred1_SimSharpAnalyse"

    // $ANTLR start "synpred2_SimSharpAnalyse"
    public void synpred2_SimSharpAnalyse_fragment() {
        // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:575:6: ( ID actualParams )
        // C:\\work\\simsharp\\Src\\Ssc\\SimSharpAnalyse.g:575:7: ID actualParams
        {
        	Match(input,ID,FOLLOW_ID_in_synpred2_SimSharpAnalyse2085); if (state.failed) return ;
        	PushFollow(FOLLOW_actualParams_in_synpred2_SimSharpAnalyse2087);
        	actualParams();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred2_SimSharpAnalyse"

    // Delegated rules

   	public bool synpred1_SimSharpAnalyse() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred1_SimSharpAnalyse_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred2_SimSharpAnalyse() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred2_SimSharpAnalyse_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}


   	protected DFA2 dfa2;
   	protected DFA14 dfa14;
   	protected DFA45 dfa45;
   	protected DFA46 dfa46;
	private void InitializeCyclicDFAs()
	{
    	this.dfa2 = new DFA2(this);
    	this.dfa14 = new DFA14(this);
    	this.dfa45 = new DFA45(this);
    	this.dfa46 = new DFA46(this);




	}

    const string DFA2_eotS =
        "\x0e\uffff";
    const string DFA2_eofS =
        "\x0e\uffff";
    const string DFA2_minS =
        "\x01\x06\x0d\uffff";
    const string DFA2_maxS =
        "\x01\x7f\x0d\uffff";
    const string DFA2_acceptS =
        "\x01\uffff\x01\x01\x01\x02\x01\x03\x01\x04\x01\x05\x01\x06\x01"+
        "\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\x0d";
    const string DFA2_specialS =
        "\x0e\uffff}>";
    static readonly string[] DFA2_transitionS = {
            "\x01\x01\x0b\uffff\x01\x07\x06\uffff\x01\x05\x15\uffff\x01"+
            "\x0d\x01\x0c\x03\uffff\x01\x02\x10\uffff\x01\x03\x01\x04\x0f"+
            "\uffff\x01\x08\x01\uffff\x01\x09\x01\uffff\x01\x0a\x05\uffff"+
            "\x01\x06\x1e\uffff\x01\x0b",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA2_eot = DFA.UnpackEncodedString(DFA2_eotS);
    static readonly short[] DFA2_eof = DFA.UnpackEncodedString(DFA2_eofS);
    static readonly char[] DFA2_min = DFA.UnpackEncodedStringToUnsignedChars(DFA2_minS);
    static readonly char[] DFA2_max = DFA.UnpackEncodedStringToUnsignedChars(DFA2_maxS);
    static readonly short[] DFA2_accept = DFA.UnpackEncodedString(DFA2_acceptS);
    static readonly short[] DFA2_special = DFA.UnpackEncodedString(DFA2_specialS);
    static readonly short[][] DFA2_transition = DFA.UnpackEncodedStringArray(DFA2_transitionS);

    protected class DFA2 : DFA
    {
        public DFA2(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 2;
            this.eot = DFA2_eot;
            this.eof = DFA2_eof;
            this.min = DFA2_min;
            this.max = DFA2_max;
            this.accept = DFA2_accept;
            this.special = DFA2_special;
            this.transition = DFA2_transition;

        }

        override public string Description
        {
            get { return "78:1: statement : ( block | prefixedBlock | valueAssignment | refAssignment | methCall | connection | compoundStatement | condition | whileStatement | forStatement | objectGenerator | gotoStatement | labelStatement );"; }
        }

    }

    const string DFA14_eotS =
        "\x1d\uffff";
    const string DFA14_eofS =
        "\x1d\uffff";
    const string DFA14_minS =
        "\x01\x03\x1c\uffff";
    const string DFA14_maxS =
        "\x01\u008a\x1c\uffff";
    const string DFA14_acceptS =
        "\x01\uffff\x01\x02\x01\x01\x1a\uffff";
    const string DFA14_specialS =
        "\x1d\uffff}>";
    static readonly string[] DFA14_transitionS = {
            "\x01\x01\x12\uffff\x01\x02\x0c\uffff\x01\x02\x09\uffff\x02"+
            "\x02\x06\uffff\x03\x02\x01\uffff\x03\x02\x01\uffff\x02\x02\x07"+
            "\uffff\x01\x02\x02\uffff\x02\x02\x01\uffff\x02\x02\x20\uffff"+
            "\x13\x02\x08\uffff\x02\x02",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA14_eot = DFA.UnpackEncodedString(DFA14_eotS);
    static readonly short[] DFA14_eof = DFA.UnpackEncodedString(DFA14_eofS);
    static readonly char[] DFA14_min = DFA.UnpackEncodedStringToUnsignedChars(DFA14_minS);
    static readonly char[] DFA14_max = DFA.UnpackEncodedStringToUnsignedChars(DFA14_maxS);
    static readonly short[] DFA14_accept = DFA.UnpackEncodedString(DFA14_acceptS);
    static readonly short[] DFA14_special = DFA.UnpackEncodedString(DFA14_specialS);
    static readonly short[][] DFA14_transition = DFA.UnpackEncodedStringArray(DFA14_transitionS);

    protected class DFA14 : DFA
    {
        public DFA14(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 14;
            this.eot = DFA14_eot;
            this.eof = DFA14_eof;
            this.min = DFA14_min;
            this.max = DFA14_max;
            this.accept = DFA14_accept;
            this.special = DFA14_special;
            this.transition = DFA14_transition;

        }

        override public string Description
        {
            get { return "()+ loopback of 163:23: ( expression )+"; }
        }

    }

    const string DFA45_eotS =
        "\x1d\uffff";
    const string DFA45_eofS =
        "\x1d\uffff";
    const string DFA45_minS =
        "\x01\x03\x1c\uffff";
    const string DFA45_maxS =
        "\x01\u008a\x1c\uffff";
    const string DFA45_acceptS =
        "\x01\uffff\x01\x02\x01\x01\x1a\uffff";
    const string DFA45_specialS =
        "\x1d\uffff}>";
    static readonly string[] DFA45_transitionS = {
            "\x01\x01\x12\uffff\x01\x02\x0c\uffff\x01\x02\x09\uffff\x02"+
            "\x02\x06\uffff\x03\x02\x01\uffff\x03\x02\x01\uffff\x02\x02\x07"+
            "\uffff\x01\x02\x02\uffff\x02\x02\x01\uffff\x02\x02\x20\uffff"+
            "\x13\x02\x08\uffff\x02\x02",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA45_eot = DFA.UnpackEncodedString(DFA45_eotS);
    static readonly short[] DFA45_eof = DFA.UnpackEncodedString(DFA45_eofS);
    static readonly char[] DFA45_min = DFA.UnpackEncodedStringToUnsignedChars(DFA45_minS);
    static readonly char[] DFA45_max = DFA.UnpackEncodedStringToUnsignedChars(DFA45_maxS);
    static readonly short[] DFA45_accept = DFA.UnpackEncodedString(DFA45_acceptS);
    static readonly short[] DFA45_special = DFA.UnpackEncodedString(DFA45_specialS);
    static readonly short[][] DFA45_transition = DFA.UnpackEncodedStringArray(DFA45_transitionS);

    protected class DFA45 : DFA
    {
        public DFA45(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 45;
            this.eot = DFA45_eot;
            this.eof = DFA45_eof;
            this.min = DFA45_min;
            this.max = DFA45_max;
            this.accept = DFA45_accept;
            this.special = DFA45_special;
            this.transition = DFA45_transition;

        }

        override public string Description
        {
            get { return "()+ loopback of 519:23: ( expression )+"; }
        }

    }

    const string DFA46_eotS =
        "\x1c\uffff";
    const string DFA46_eofS =
        "\x1c\uffff";
    const string DFA46_minS =
        "\x01\x16\x1b\uffff";
    const string DFA46_maxS =
        "\x01\u008a\x1b\uffff";
    const string DFA46_acceptS =
        "\x01\uffff\x01\x01\x07\uffff\x01\x02\x01\x03\x01\x04\x01\x05\x01"+
        "\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\x0d\x01"+
        "\x0e\x01\x0f\x01\x10\x01\x11\x01\x12\x01\x13\x01\x14";
    const string DFA46_specialS =
        "\x1c\uffff}>";
    static readonly string[] DFA46_transitionS = {
            "\x01\x12\x0c\uffff\x01\x0a\x09\uffff\x02\x18\x06\uffff\x01"+
            "\x0d\x01\x0c\x01\x0e\x01\uffff\x01\x0f\x01\x10\x01\x0b\x01\uffff"+
            "\x01\x15\x01\x14\x07\uffff\x01\x19\x02\uffff\x01\x01\x01\x16"+
            "\x01\uffff\x01\x09\x01\x01\x20\uffff\x04\x18\x01\x11\x01\x17"+
            "\x05\x09\x01\x1a\x05\x01\x01\x13\x01\x1b\x08\uffff\x02\x01",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA46_eot = DFA.UnpackEncodedString(DFA46_eotS);
    static readonly short[] DFA46_eof = DFA.UnpackEncodedString(DFA46_eofS);
    static readonly char[] DFA46_min = DFA.UnpackEncodedStringToUnsignedChars(DFA46_minS);
    static readonly char[] DFA46_max = DFA.UnpackEncodedStringToUnsignedChars(DFA46_maxS);
    static readonly short[] DFA46_accept = DFA.UnpackEncodedString(DFA46_acceptS);
    static readonly short[] DFA46_special = DFA.UnpackEncodedString(DFA46_specialS);
    static readonly short[][] DFA46_transition = DFA.UnpackEncodedStringArray(DFA46_transitionS);

    protected class DFA46 : DFA
    {
        public DFA46(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 46;
            this.eot = DFA46_eot;
            this.eof = DFA46_eof;
            this.min = DFA46_min;
            this.max = DFA46_max;
            this.accept = DFA46_accept;
            this.special = DFA46_special;
            this.transition = DFA46_transition;

        }

        override public string Description
        {
            get { return "530:1: expression : ( primary | ^( valueRelationalOperator expression expression ) | ^( Unary MINUS expression ) | ^( CONCAT expression expression ) | ^( MINUS expression expression ) | ^( PLUS expression expression ) | ^( TIMES expression expression ) | ^( INTDIV expression expression ) | ^( EXP expression expression ) | ^( NOT expression ) | ^( RemoteAccess expression id ) | objectGenerator | ^( REFNEQ expression expression ) | ^( REFEQ expression expression ) | ^( IS expression id ) | ^( IN expression id ) | ^( booleanOperator expression expression ) | refAssignment | ^( QUA expression ID ) | ^( THIS ID ) );"; }
        }

    }

 

    public static readonly BitSet FOLLOW_SimulaSourceModule_in_begin87 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_program_in_begin93 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_Program_in_program116 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_programBody_in_program127 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_block_in_programBody147 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_compoundStatement_in_programBody152 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_statement_in_labeledStatement164 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_block_in_statement176 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_prefixedBlock_in_statement181 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_valueAssignment_in_statement186 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_refAssignment_in_statement191 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_methCall_in_statement196 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_connection_in_statement201 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_compoundStatement_in_statement206 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_condition_in_statement211 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_whileStatement_in_statement216 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_forStatement_in_statement221 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_objectGenerator_in_statement226 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_gotoStatement_in_statement231 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_labelStatement_in_statement236 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_Label_in_labelStatement249 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_ID_in_labelStatement253 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_GoTo_in_gotoStatement272 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_designationalExpression_in_gotoStatement274 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_SwitchDesignator_in_designationalExpression288 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_ID_in_designationalExpression290 = new BitSet(new ulong[]{0x6EE0600800400000UL,0xFFFFC00000003640UL,0x0000000000000601UL});
    public static readonly BitSet FOLLOW_expression_in_designationalExpression292 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_LabelDesignator_in_designationalExpression299 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_ID_in_designationalExpression301 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_FOR_in_forStatement315 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_ID_in_forStatement317 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000060UL});
    public static readonly BitSet FOLLOW_forRightPart_in_forStatement319 = new BitSet(new ulong[]{0x0011800002040040UL,0x8000000105400060UL});
    public static readonly BitSet FOLLOW_statement_in_forStatement321 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_VALASSIGN_in_forRightPart335 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_forListElement_in_forRightPart337 = new BitSet(new ulong[]{0x0000000600000008UL});
    public static readonly BitSet FOLLOW_REFASSIGN_in_forRightPart345 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_forListElement_in_forRightPart347 = new BitSet(new ulong[]{0x0000000600000008UL});
    public static readonly BitSet FOLLOW_StepListElement_in_forListElement362 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_expression_in_forListElement364 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000008000000UL});
    public static readonly BitSet FOLLOW_STEP_in_forListElement366 = new BitSet(new ulong[]{0x6EE0600800400000UL,0xFFFFC00000003640UL,0x0000000000000601UL});
    public static readonly BitSet FOLLOW_expression_in_forListElement368 = new BitSet(new ulong[]{0x6EE0600800400000UL,0xFFFFC00000003640UL,0x0000000000000601UL});
    public static readonly BitSet FOLLOW_expression_in_forListElement370 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000010000000UL});
    public static readonly BitSet FOLLOW_UNTIL_in_forListElement372 = new BitSet(new ulong[]{0x6EE0600800400000UL,0xFFFFC00000003640UL,0x0000000000000601UL});
    public static readonly BitSet FOLLOW_expression_in_forListElement374 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_WhileListElement_in_forListElement381 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_expression_in_forListElement383 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_WHILE_in_whileStatement397 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_expression_in_whileStatement399 = new BitSet(new ulong[]{0x0011800002040040UL,0x8000000105400060UL});
    public static readonly BitSet FOLLOW_statement_in_whileStatement401 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_IF_in_condition415 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_expression_in_condition417 = new BitSet(new ulong[]{0x0011800002040040UL,0x8000000105400060UL});
    public static readonly BitSet FOLLOW_statement_in_condition419 = new BitSet(new ulong[]{0x0011800002040048UL,0x8000000105400060UL});
    public static readonly BitSet FOLLOW_statement_in_condition422 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_CompoundStatement_in_compoundStatement438 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_statement_in_compoundStatement442 = new BitSet(new ulong[]{0x0011800002040048UL,0x8000000105400060UL});
    public static readonly BitSet FOLLOW_INSPECT_in_connection457 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_expression_in_connection459 = new BitSet(new ulong[]{0x0000000008000000UL,0x0000000200000000UL});
    public static readonly BitSet FOLLOW_connect2_in_connection462 = new BitSet(new ulong[]{0x0000000000000008UL,0x0000000400000000UL});
    public static readonly BitSet FOLLOW_whenClause_in_connection465 = new BitSet(new ulong[]{0x0000000008000008UL,0x0000000600000000UL});
    public static readonly BitSet FOLLOW_otherwiseClause_in_connection471 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_WHEN_in_whenClause486 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_ID_in_whenClause488 = new BitSet(new ulong[]{0x0000000004000000UL});
    public static readonly BitSet FOLLOW_connect1_in_whenClause490 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_OTHERWISE_in_otherwiseClause504 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_statement_in_otherwiseClause506 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_ConnectBlock1_in_connect1520 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_statement_in_connect1522 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_ConnectBlock2_in_connect2534 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_statement_in_connect2536 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_MethCall_in_methCall548 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_expression_in_methCall552 = new BitSet(new ulong[]{0x0000000000080008UL});
    public static readonly BitSet FOLLOW_actualParams_in_methCall554 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_ActualParameters_in_actualParams578 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_expression_in_actualParams580 = new BitSet(new ulong[]{0x6EE0600800400008UL,0xFFFFC00000003640UL,0x0000000000000601UL});
    public static readonly BitSet FOLLOW_Block_in_block601 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_declaration_in_block636 = new BitSet(new ulong[]{0x0011809012040448UL,0x8000004105400060UL});
    public static readonly BitSet FOLLOW_statement_in_block652 = new BitSet(new ulong[]{0x0011800002040048UL,0x8000000105400060UL});
    public static readonly BitSet FOLLOW_PrefixedBlock_in_prefixedBlock678 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_ID_in_prefixedBlock685 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000200UL});
    public static readonly BitSet FOLLOW_ID_in_prefixedBlock691 = new BitSet(new ulong[]{0x0000000000040040UL});
    public static readonly BitSet FOLLOW_block_in_prefixedBlock700 = new BitSet(new ulong[]{0x0000000000000000UL,0x8000000000000000UL});
    public static readonly BitSet FOLLOW_compoundStatement_in_prefixedBlock702 = new BitSet(new ulong[]{0x0000000000000000UL,0x8000000000000000UL});
    public static readonly BitSet FOLLOW_objectGenerator_in_prefixedBlock714 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_varDecl_in_declaration732 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_procDecl_in_declaration737 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_classDecl_in_declaration742 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_arrayDecl_in_declaration747 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_switchDecl_in_declaration752 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_SWITCH_in_switchDecl765 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_ID_in_switchDecl769 = new BitSet(new ulong[]{0x0008000000000000UL});
    public static readonly BitSet FOLLOW_switchList_in_switchDecl771 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_SwitchList_in_switchList789 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_ID_in_switchList791 = new BitSet(new ulong[]{0x0000000000000008UL,0x0000000000000200UL});
    public static readonly BitSet FOLLOW_ArrayDecl_in_arrayDecl811 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_type_in_arrayDecl819 = new BitSet(new ulong[]{0x0000010000000000UL});
    public static readonly BitSet FOLLOW_array_in_arrayDecl833 = new BitSet(new ulong[]{0x0000010000000008UL});
    public static readonly BitSet FOLLOW_Array_in_array862 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_ID_in_array869 = new BitSet(new ulong[]{0x0000020000000000UL,0x0000000000000200UL});
    public static readonly BitSet FOLLOW_arrayDim_in_array877 = new BitSet(new ulong[]{0x0000020000000008UL});
    public static readonly BitSet FOLLOW_ArrayDim_in_arrayDim911 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_expression_in_arrayDim913 = new BitSet(new ulong[]{0x6EE0600800400000UL,0xFFFFC00000003640UL,0x0000000000000601UL});
    public static readonly BitSet FOLLOW_expression_in_arrayDim915 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_ClassDecl_in_classDecl934 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_ID_in_classDecl939 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000800UL});
    public static readonly BitSet FOLLOW_CLASS_in_classDecl948 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000200UL});
    public static readonly BitSet FOLLOW_ID_in_classDecl955 = new BitSet(new ulong[]{0x00000020C0000000UL,0x0000020000000000UL});
    public static readonly BitSet FOLLOW_formalParameters_in_classDecl967 = new BitSet(new ulong[]{0x00000020C0000000UL,0x0000020000000000UL});
    public static readonly BitSet FOLLOW_valueParams_in_classDecl977 = new BitSet(new ulong[]{0x00000020C0000000UL,0x0000020000000000UL});
    public static readonly BitSet FOLLOW_specification_in_classDecl987 = new BitSet(new ulong[]{0x00000020C0000000UL,0x0000020000000000UL});
    public static readonly BitSet FOLLOW_classBody_in_classDecl994 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_ClassBody_in_classBody1022 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_prolog_in_classBody1027 = new BitSet(new ulong[]{0x0000100000000008UL});
    public static readonly BitSet FOLLOW_epilog_in_classBody1042 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_Prolog_in_prolog1066 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_declaration_in_prolog1075 = new BitSet(new ulong[]{0x0011809012040448UL,0x8000004105400060UL});
    public static readonly BitSet FOLLOW_statement_in_prolog1091 = new BitSet(new ulong[]{0x0011800002040048UL,0x8000000105400060UL});
    public static readonly BitSet FOLLOW_Epilog_in_epilog1108 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_statement_in_epilog1117 = new BitSet(new ulong[]{0x0011800002040048UL,0x8000000105400060UL});
    public static readonly BitSet FOLLOW_VarDecl_in_varDecl1131 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_type_in_varDecl1135 = new BitSet(new ulong[]{0x0000000000001000UL});
    public static readonly BitSet FOLLOW_TypeList_in_varDecl1142 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_ID_in_varDecl1151 = new BitSet(new ulong[]{0x0000000000002008UL,0x0000000000000200UL});
    public static readonly BitSet FOLLOW_ConstElement_in_varDecl1165 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_ID_in_varDecl1169 = new BitSet(new ulong[]{0x0000000000000000UL,0x1000000000000000UL});
    public static readonly BitSet FOLLOW_NUM_REAL_in_varDecl1173 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_ProcDecl_in_procDecl1234 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_type_in_procDecl1241 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000200UL});
    public static readonly BitSet FOLLOW_ID_in_procDecl1253 = new BitSet(new ulong[]{0x00000000E0000000UL,0x0000030000000000UL});
    public static readonly BitSet FOLLOW_formalParameters_in_procDecl1267 = new BitSet(new ulong[]{0x00000000E0000000UL,0x0000030000000000UL});
    public static readonly BitSet FOLLOW_nameParams_in_procDecl1277 = new BitSet(new ulong[]{0x00000000E0000000UL,0x0000030000000000UL});
    public static readonly BitSet FOLLOW_valueParams_in_procDecl1286 = new BitSet(new ulong[]{0x00000000E0000000UL,0x0000030000000000UL});
    public static readonly BitSet FOLLOW_specification_in_procDecl1296 = new BitSet(new ulong[]{0x00000000E0000000UL,0x0000030000000000UL});
    public static readonly BitSet FOLLOW_procBody_in_procDecl1311 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_FormalParameters_in_formalParameters1350 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_ID_in_formalParameters1358 = new BitSet(new ulong[]{0x0000000000000008UL,0x0000000000000200UL});
    public static readonly BitSet FOLLOW_VALUE_in_valueParams1389 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_ID_in_valueParams1396 = new BitSet(new ulong[]{0x0000000000000008UL,0x0000000000000200UL});
    public static readonly BitSet FOLLOW_NAME_in_nameParams1424 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_ID_in_nameParams1432 = new BitSet(new ulong[]{0x0000000000000008UL,0x0000000000000200UL});
    public static readonly BitSet FOLLOW_Specification_in_specification1461 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_type_in_specification1468 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000200UL});
    public static readonly BitSet FOLLOW_ID_in_specification1477 = new BitSet(new ulong[]{0x0000000000000808UL,0x0000000000000200UL});
    public static readonly BitSet FOLLOW_ProcBody_in_procBody1510 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_statement_in_procBody1512 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_Type_in_type1528 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_INTEGER_in_type1531 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_TEXT_in_type1539 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_REAL_in_type1549 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_CHARACTER_in_type1558 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_REF_in_type1566 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000200UL});
    public static readonly BitSet FOLLOW_ID_in_type1570 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_BOOLEAN_in_type1578 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_REFASSIGN_in_refAssignment1605 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_lvalue_in_refAssignment1611 = new BitSet(new ulong[]{0x6EE0600800400000UL,0xFFFFC00000003640UL,0x0000000000000601UL});
    public static readonly BitSet FOLLOW_expression_in_refAssignment1617 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_VALASSIGN_in_valueAssignment1633 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_lvalue_in_valueAssignment1639 = new BitSet(new ulong[]{0x6EE0600800400000UL,0xFFFFC00000003640UL,0x0000000000000601UL});
    public static readonly BitSet FOLLOW_expression_in_valueAssignment1647 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_arrayAssign_in_lvalue1671 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_remoteAssign_in_lvalue1676 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_ID_in_lvalue1682 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_ActualParameters_in_arrayParams1699 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_expression_in_arrayParams1701 = new BitSet(new ulong[]{0x6EE0600800400008UL,0xFFFFC00000003640UL,0x0000000000000601UL});
    public static readonly BitSet FOLLOW_RemoteAssign_in_remoteAssign1716 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_expression_in_remoteAssign1718 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000200UL});
    public static readonly BitSet FOLLOW_ID_in_remoteAssign1720 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_ID_in_arrayAssign1733 = new BitSet(new ulong[]{0x0000000000080000UL});
    public static readonly BitSet FOLLOW_actualParams_in_arrayAssign1735 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_primary_in_expression1747 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_valueRelationalOperator_in_expression1753 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_expression_in_expression1755 = new BitSet(new ulong[]{0x6EE0600800400000UL,0xFFFFC00000003640UL,0x0000000000000601UL});
    public static readonly BitSet FOLLOW_expression_in_expression1757 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_Unary_in_expression1764 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_MINUS_in_expression1766 = new BitSet(new ulong[]{0x6EE0600800400000UL,0xFFFFC00000003640UL,0x0000000000000601UL});
    public static readonly BitSet FOLLOW_expression_in_expression1768 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_CONCAT_in_expression1775 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_expression_in_expression1777 = new BitSet(new ulong[]{0x6EE0600800400000UL,0xFFFFC00000003640UL,0x0000000000000601UL});
    public static readonly BitSet FOLLOW_expression_in_expression1779 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_MINUS_in_expression1786 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_expression_in_expression1788 = new BitSet(new ulong[]{0x6EE0600800400000UL,0xFFFFC00000003640UL,0x0000000000000601UL});
    public static readonly BitSet FOLLOW_expression_in_expression1790 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_PLUS_in_expression1797 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_expression_in_expression1799 = new BitSet(new ulong[]{0x6EE0600800400000UL,0xFFFFC00000003640UL,0x0000000000000601UL});
    public static readonly BitSet FOLLOW_expression_in_expression1801 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_TIMES_in_expression1808 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_expression_in_expression1810 = new BitSet(new ulong[]{0x6EE0600800400000UL,0xFFFFC00000003640UL,0x0000000000000601UL});
    public static readonly BitSet FOLLOW_expression_in_expression1812 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_INTDIV_in_expression1819 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_expression_in_expression1821 = new BitSet(new ulong[]{0x6EE0600800400000UL,0xFFFFC00000003640UL,0x0000000000000601UL});
    public static readonly BitSet FOLLOW_expression_in_expression1823 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_EXP_in_expression1830 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_expression_in_expression1832 = new BitSet(new ulong[]{0x6EE0600800400000UL,0xFFFFC00000003640UL,0x0000000000000601UL});
    public static readonly BitSet FOLLOW_expression_in_expression1834 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_NOT_in_expression1841 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_expression_in_expression1843 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_RemoteAccess_in_expression1850 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_expression_in_expression1852 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000200UL});
    public static readonly BitSet FOLLOW_id_in_expression1854 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_objectGenerator_in_expression1860 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_REFNEQ_in_expression1866 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_expression_in_expression1868 = new BitSet(new ulong[]{0x6EE0600800400000UL,0xFFFFC00000003640UL,0x0000000000000601UL});
    public static readonly BitSet FOLLOW_expression_in_expression1870 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_REFEQ_in_expression1877 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_expression_in_expression1879 = new BitSet(new ulong[]{0x6EE0600800400000UL,0xFFFFC00000003640UL,0x0000000000000601UL});
    public static readonly BitSet FOLLOW_expression_in_expression1881 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_IS_in_expression1888 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_expression_in_expression1890 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000200UL});
    public static readonly BitSet FOLLOW_id_in_expression1892 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_IN_in_expression1899 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_expression_in_expression1901 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000200UL});
    public static readonly BitSet FOLLOW_id_in_expression1903 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_booleanOperator_in_expression1910 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_expression_in_expression1912 = new BitSet(new ulong[]{0x6EE0600800400000UL,0xFFFFC00000003640UL,0x0000000000000601UL});
    public static readonly BitSet FOLLOW_expression_in_expression1914 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_refAssignment_in_expression1920 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_QUA_in_expression1926 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_expression_in_expression1928 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000200UL});
    public static readonly BitSet FOLLOW_ID_in_expression1930 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_THIS_in_expression1937 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_ID_in_expression1939 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_NEW_in_objectGenerator1952 = new BitSet(new ulong[]{0x0000000000000004UL});
    public static readonly BitSet FOLLOW_id_in_objectGenerator1954 = new BitSet(new ulong[]{0x0000000000000008UL});
    public static readonly BitSet FOLLOW_set_in_booleanOperator0 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_set_in_valueRelationalOperator0 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_id_in_primary2030 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_logicalValue_in_primary2035 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_NOTEXT_in_primary2040 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_NONE_in_primary2045 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_NUM_INT_in_primary2052 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_CHARCONST_in_primary2059 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_NUM_REAL_in_primary2066 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_STRING_in_primary2073 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_ID_in_id2092 = new BitSet(new ulong[]{0x0000000000080000UL});
    public static readonly BitSet FOLLOW_actualParams_in_id2094 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_ID_in_id2100 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_set_in_logicalValue0 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_ID_in_synpred1_SimSharpAnalyse1664 = new BitSet(new ulong[]{0x0000000000080000UL});
    public static readonly BitSet FOLLOW_arrayParams_in_synpred1_SimSharpAnalyse1666 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_ID_in_synpred2_SimSharpAnalyse2085 = new BitSet(new ulong[]{0x0000000000080000UL});
    public static readonly BitSet FOLLOW_actualParams_in_synpred2_SimSharpAnalyse2087 = new BitSet(new ulong[]{0x0000000000000002UL});

}
